一.什么时候创建
1.加载info.plist,判断有没有指定main.storyboard,指定了main.storyboard,就会去加载main.storyboard,执行main.storyboard的时候创建.
二.main.storyboard步骤
2.1创建窗口
2.2加载控制器
2.3设置窗口的根控制器,显示窗口
三.手动创建窗口
1.什么时候创建?
1.在加载info.plist文件之后,程序启动才完成,启动完成之后,就要显示窗口,因此在程序启动完成的时候创建窗口.
四.窗口补充
1.应用程序中那些控件属于窗口,1.状态栏 2.键盘
2.窗口层级关系 UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal
设置窗口的层级,层级谁大就显示在最外面
3.UITextField显示键盘
注意点:如果一个键盘想要弹出来,必须把textField添加到一个控件上.
设置窗口的根控制器,底层会自动把根控制器的view添加到窗口上,并且让控制器的view有旋转功能
[self.window addSubview:vc.view];
makeKeyAndVisible:让窗口成为应用程序的主窗口,并且显示窗口
[self.window makeKeyAndVisible]
模仿程序一启动就加载Main.storyboard文件,创建窗口,创建箭头指向的窗口跟控制器,并且显示窗口
image.png
**xib和storyboard的区别 **
storyboard已经指定了控制器的view,不需要我们管,xib需要我们 手动管理。
代码加载storyboard
image.png通过xib创建控制器
如何通过xib创建控制器?
1.让xib与控制器产生联系,设置xib的文件拥有者是控制器,这时候xib就描述这个控制器
2.连线,告诉控制器是哪个view在描述
控制器的view创建
image.pngloadView系统默认做法
image.png
- (void)loadView的应用场景
1、一个控制器一开始的时候就展示一张图片(一种方法:在view上添加个UIImageView来显示一张图片,第二种方法:让UIImageView作为控制器的View 优点:节省一个view的内存)
2、网页控件UIWebView,已进入就展示一个网页
自定义view
image.pngloadview get的方法的原理
image.png通过xib加载控制器的view创建
系统默认的做法
image.png
通过xib创建XMGViewController控制器的view底层实现原理
根据xib创建窗口的根控制器,init底层会调用initWithNibName:bundle:
XMGViewController *vc = [[XMGViewController alloc] initWithNibName:nil bundle:nil];
1.判断下nibName有没有值,如果有值,就会去加载nibName指定的xib
2.如果nibName为空,会先去查找有没有XMGView.xib,如果有就去加载
3.如果没有XMGView.xib,就会去加载根类名同名的xib:XMGViewController.xib
4.如果还没有找到,就生成一个空的view,如下图:
网友评论