romitlee的技术杂项综合iOS 开发 iOS Developer

xib 被 viewController 加载的原理

2016-07-15  本文已影响688人  Romit_lee

在创建一个 ViewController 的时候 可以选择是否创建一个 Xib 文件.如果勾选,就会创建一个跟创建 ViewController 同名的一个 xib 的文件,并且被关联,在用到这个 ViewController 的时候,只需用[[ViewController alloc]init] 就可以加载到这个 xib.

但是如果不勾选,而事后再去单独创建一个 xib 文件和此 ViewController 做关联的话.这个 xib 的文件名 决定加载 xib 的方法.

1.如果 xib 和 viewController 名字不一样,比如 viewController 叫做"HomeViewController"  xib 叫做"Test.xib"那么即使关联, 用 init 方法创建 ViewController 是不能加载到这个 xib 的.要用到initWithNibName:@"Test" bundle:nil 这个方法去创建.

2.可以把 xib 的命名和 ViewController 一样的话,只需 init 方法就可以加载到.原理是ViewController 的 init 内部方法中首先会加载和 viewController 同名的 xib, 如果没有,则再加载去掉"controller"后的命名的 xib, 如果还是没有,则nil

例子: ViewController 命名为DemoViewController. 用 init 创建的时候,第一步寻找  命名为DemoViewController 的 xib.第二步 寻找命名为 DemoView 的 xib.如果都没寻找到 那么不加载任何 xib, 即使有关联


情况1:

DemoViewController 关联上 DemoView.xib, init 方法会加载此 xib


情况2:

DemoViewController 关联上 DemoViewController.xib,init 方法会加载此 xib


情况3:

DemoViewController 关联上了 DemoView.xib 和 DemoViewController.xib 两个 xib 文件,那么 init 方法则会加载 DemoViewController.xib 的内容


情况四:

DemoViewController 关联的 xib 名字叫做 VIewController.xib 那么用 init 方法则不会加载此 xib, 必须用initWithNibName:@"VIewController" bundle:nil方法才可以加载此 Xib.


上一篇 下一篇

猜你喜欢

热点阅读