昨天我写了那个控制器的多种创建方式,今天我也就趁热打铁,把控制器View的多种创建方式也说一下吧, 详情分析一下控制器的View的加载过程。
1. 通过xib加载
通过xib也有很多加载方式的,我先说说最简单,明确的加载方式,为了方便阅读和理解,我还是配上截图来解释。
* 直接通过xib的完整名称
> 首先先创建一个自定义的控制器(OneViewController)注意:我这里的控制器名称,即下面xib的名称
> 接着就创建一个xib
> 设置TextView的各个属性来与待会的其他view加以区分,然后配置TextView 的File's Owner的class 以及他的view连线 使之可以被控制器加载view
然后在相应的位置填写代码, 如下图
然后运行就完成指定xib的创建了, 效果如下
* 现在我们再另外创建两个新的xib 注意其名称(OneView,OneViewController )和我们控制器的名称(OneViewController)
* 创建完 也要和上一个样设置自己的属性 和File's Owner的class 为我们的控制器(OneViewController) 以及连接View
》
> 接下来我们来修改我们刚才的代码 把
initWithNibName:@"TextView" bundle:nil 改为 init
然后运行, 结果如下
上图加载的这个view 就是我们的OneView.xib的view
现在我们把OneView.xib的文件删了, 然后清除一下程序(command + shift +K)然后再次运行程序(command + R)
结果如下
上图的view就是我们OneViewController.xib的view
跟上面一样,现在我们把OneViewController.xib的文件删了, 然后清除一下程序(command + shift +K)然后再次运行程序(command + R)结果如下
上面是系统自己创建了应该“空白”的view, “空白”就是什么也没有, 之所以是黑色是因为我们的window的背景颜色为黑, 现在我们设置我们控制器的view为红色来证明它被创建了,然后运行
效果如下
现在我们来重写控制器的 - (void)loadView;方法
然后运行, 效果如下, 说明系统可以通过-(void)loadView这个方法来创建view的
好了, 演示到现在,我就总结一下控制器view的具体加载顺序
首先系统调用控制器的loadView方法去创建,如果没有就会去调用storyBodard; 切记(这里的stroryBoard)如果是本来就有的,就只能用于系统自己创建的viewController控制器, 本次例子都是在自定义的控制器(OneViewController)下创建的View, 因为我们并没有创建自定义的storyboard文件,所以就会自己查找并加载xib的文件,如我们在代码指定了xib的文件名称,就会根据nibName对应的xib的描述去创建, 如果我们的代码是用init实力化对象的话, 系统会先根据自定义控制器(OneViewController)的名称去掉Controller的名称的xib(OneView.xib),根据OneView.xib的描述去创建, 如没有该文件,就会查找与自定义控制器名称一样的xib文件(OneViewController.xib),然后根据OneViewController.xib的描述去创建。 如果还是没有该文件的话,系统就会自己创建一个空白的View。
请注意:我上面的文字描述是根据我自己的实例描述的, 我自定义的控制器名称为OneViewConteroller, 而下面的辅助图中是控制器HMViewController的view的创建, 原理都是一样的
HMViewController的view的创建
如果需要源代码的可以到下面的百度云链接下载:
链接: http://pan.baidu.com/s/1pJmoAKF 密码: sng2
感谢你们的阅读! 希望我们共同努力, 共同进步!
你们的评论是对我的最大支持!!