xib 和 storyboard

xib和storyboard的對比

  • 共同點

  • 都是用來描述軟件界面

  • 都用運用Interface Builder工具編輯

  • 本質都是轉換成代碼去創建控件(控件都可以拖進去)

  • 不同點

  • xib屬于輕量級的,只用用來展示界面

  • storyboard是重量級的,它是用來展示整個app的多個界面,并且可以設置界面之間的跳轉關系


xib的加載

// 方法1
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil]

// 方法2
UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];

// 然后取出數組的lastObject

使用xib自定義的步驟

  • 新建自定義控件類
73fed72c-d1a4-41f6-bf5a-e3f214d2fcd0.png
  • 新建xib文件(文件名建議和自定義控件類名相同)
f333d723-937d-481a-b856-4074d878eda8.png
  • 修改xib中calss類型,相當于指定給想對象的自定義控件
1fe47d50-2e9d-4579-b7d0-97deb6ebd7cc.png
  • 封裝xib的加載過程
6e30c180-4ec7-47b5-9a94-309546d7507d.png
  • 增加模型屬性,在模型屬性的setter方法中設置數據到控件上
91a8be0f-e213-4ae5-8396-7c5bdb167405.png

xib加載控制器

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

// 加載xib
FKViewController *rootView = [[FKViewController alloc] initWithNibName:@"FKViewController" bundle:nil];

self.window.rootViewController = rootView;
[self.window makeKeyAndVisible];
  • 常見問題


    0a54bd3f-9b24-4d17-85e9-527bdced1c64.png
  • 解決方案:連線

  • 把class類型修改

481131b6-c409-4d82-af15-6b378d27ca6b.png
  • 連線
2e80bb14-b953-432d-a47f-06ab9e69458b.png

特殊情況

  • 如果加載xib的代碼,設置為nil,即
  FKViewController *fkView = [[FKViewController alloc] initWithNibName:nil bundle:nil];
  // 或者
  FKViewController *fkView = [[FKViewController alloc] init];
  • 加載跟類名相同的xib
  • 果描述控制器的view根控制器名相同,就會就加載
  • 只有控制的int方法,底層會調用類名相同,就會去加載
  • 只有控制器的init方法底層會調用initWithNibName:bundle:方法

  • 只要通過initWithNibName:bundle:初始化控制器,并且nibName為nil,就會執行以下幾步(以FKViewController為例)

  • 目前測試好像順序有點反,優先度 FKViewController > FKView

  • 1.尋找有沒有跟控制器類名同名但是不帶Controller的xib,如果有就會去加載(FKView.xib)

  • 2.尋找有沒有跟控制器類名同名的xib,如果有就會去加載(FKViewController.xib)

  • 3.如果都沒有找到,創建空的view,

b43f5c4a-6b48-4ba2-83d8-0bbb205c760e.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容