简介:
UIWindow是一种特殊的UiView,通常一个Application中只会有一个UIWindow。
ios程序启动后,创建的第一个视图控件就是UIWindow,【先创建该view的控制器】接着创建控制器的view,最后将控制器的view添加到UIWindow上。控制器的view就显示在屏幕上了
一个ios程序之所以能显示到屏幕上,完全是因为他有UIWindow,即:没有UIWindow,就看不见任何UI界面
创建
1,一个空工程中UIWindow的创建:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建UIWindow
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen]bounds]];
//设置UIWindow的颜色
self.window.backgroundColor = [UIColor whiteColor];
//设置为主窗口并显示出来
[self.window makeKeyAndVisible];
return YES;
}
2,在storyBoard中,UIWindow的创建
启动程序,先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,创建代理,并且把代理设置给application(看项目配置文件info.plist里面的storyboard的name,根据这个name找到对应的storyboard),开启一个事件循环,当程序加载完毕,他会调用代理的didFinishLaunchingWithOptions:方法。在调用didFinishLaunchingWithOptions:方法之前,会加载storyboard,在加载的时候创建一个window,接下来会创建箭头所指向的控制器,把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。
获取UIWindow
1,主窗口和次窗口
【self.window makekeyandvisible】让窗口成为主窗口,并且显示出来。有这个方法,才能把信息显示到屏幕上。
因为Window有makekeyandvisible这个方法,可以让这个Window凭空的显示出来,而其他的view没有这个方法,所以它只能依赖于Window,Window显示出来后,view才依附在Window上显示出来。
【self.window make keywindow】//让uiwindow成为主窗口,但不显示。
2,获取UIWindow
(1)[UIApplication sharedApplication].windows 在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象(平时输入文字弹出的键盘,就处在一个新的UIWindow中)
(2)[UIApplication sharedApplication].keyWindow(获取应用程序的主窗口)用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。
注意:如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow
(3)view.window获得某个UIView所在的UIWindow