多控制器之UIWindow
UIWindow
简介
- UIWindow是一种特殊的UIView,通常一个app中至少有一个UIWindow
- 程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上
创建和相关属性
-
应用程序的启动原理中,第四步中如果有Main
Info.plist文件,判断有没有Main,如果有,会去加载Main.storyBoard 1.创建一个窗口UIWindow 2.帮你创建Main.storyBoard当中箭头指向的控制器,它会把控制器设为窗口的根控制器, 并且,把控制器的View添加到窗口中 3.显示窗口
-
如果没有指定的Main的话,就需要手动的去创建窗口
- 1.创建窗口 - 2.设置窗口的根控制器 - 3.显示窗口 - 4.注意:从ios9之后,如果一个应用程序有多个窗口时,控制器就把状态栏给隐藏,解决办法:把状态栏交给应用程序管理
// 1.创建窗口 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 2.设置窗口的根控制器 UIViewController *vc = [[UIViewController alloc] init]; vc.view.backgroundColor = [UIColor yellowColor]; self.window.rootViewController = vc; // 3.显示窗口 [self.window makeKeyAndVisible];
注:
[self.window makeKeyAndVisible]
的底层实现:1.让窗口成为显示状态 窗口默认是隐藏的.hidden = yes; 底层做的事件就是:self.window.hidden = NO; 2.把控制器的view添加到窗口上面 [self.window addSubView:rootVC.view]; // rootVC根控制器 3.把当前窗口设置成应用程序的主窗口 application.keyWindow 获得应用程序的主窗口
-
添加键盘(ios中键盘和状态栏都是窗口)
// 创建一个UITextField,用来点击启动键盘 UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; // 让UITextField成为第一响应者 [tf becomeFirstResponder]; // 控制器添加UITextField [vc.view addSubview:tf]; // vc为当前根控制器
-
UIWindow中的层级
设置window的层级.UIWindowLevelNormal它是⼀一个CGFloat类型.
self.window.windowLevel = UIWindowLevelNormal
UIWindowLevelNormal
<UIWindowLevelStatusBar
<UIWindowLevelAlert