您的位置:首页 > 移动开发 > IOS开发

iOS开发之控制器View的创建

2015-11-27 08:54 399 查看
首先我们来看一下以下情况window上会加载什么样的控制器view。

1> 根据之前讲到的,先创建一个和控制器(HXViewController)同名的xib文件(文件中view灰色),并加载初始化该控制器,使它成为window的根控制器。(设置File’s Owner控制器,拖线指定view)

代码:

HXViewController *vc = [[HXViewController alloc] initWithNibName:@"HXViewController" bundle:nil];
self.window.rootViewController= vc;


显示的效果:灰色





2> 在1>的基础上,如果我只在HXViewController中实现loadView方法,其他的地方都没有改动过,则显示效果为白色,即没有创建1>中xib控制器view

显示效果:白色





3> 将1>中xib删除,再向项目中添加一个xib文件(名为:HXView,设置File’s Owner控制器,拖线指定view黄色),再将代码

HXViewController *vc = [[HXViewController alloc] initWithNibName:@"HXViewController" bundle:nil];
改为

HXViewController *vc = [[HXViewController alloc] initWithNibName:nil bundle:nil];


HXViewController *vc = [[HXViewController alloc] init];
显示的效果:黄色





4> 在3>的基础上,如果再将控制器中的loadView方法打开。则运行效果显示同2>相同,即没有加载3>中xib控制器view。

显示效果:白色

总结:当指定加载某个xib文件中控制器的时候,程序才会去加载那个xib中的控制器view;如果没有指定某个xib文件(即:nibName为nil时)就会去加载View.xib中的控制器view(如果有的话);如果没有View.xib,系统会返回一个nil的view加载到window上。如果控制器实现了loadView方法,则系统直接返回该方法中的view,不会再去加载xib/storyboard中的控制器view了。

控制器view加载的具体流程如下:(引用文档中的图片)



我觉得mj老师的流程图更详细点:(现引用李老师的图)



总结:
1、控制器的view是延迟加载的:用到的时候才会去加载。
2、可以通过isViewLoaded方法来判断一个控制器的view是否已经完成了加载。
3、控制器view加载完毕之后,才会调用viewdidLoad方法。(该方法在view加载完毕后,只会被调用一次,所有我们会将创建view的子控件方法放在该方法中执行)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: