UIWindow
UIWindow —> UIView
一、常用方法
1.- (void)makeKeyWindow;
让当前UIWindow变成keyWindow(主窗口)
2.- (void)makeKeyAndVisible;
让当前UIWindow变成keyWindow,并显示出来
注意:
1.makeKeyAndVisible就意味着,让window成为主窗口,并且可见。
2.窗口可以设置很多个,但是UIWindow有且只有一个主窗口。
3.[UIApplication sharedApplication].keyWindow
用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow,主要针对IOS6。
4.[UIApplication sharedApplication].windows
打印出屏幕上有多少window。
注意:
平时输入文字弹出的键盘,就处在一个新的UIWindow中,拿到键盘所在的window就可以修改键盘的按钮。
UIWindow只有一个主窗口,UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow,控制器不具备主动显示的功能,只有UIWindow才能显示到屏幕上,控制器要依赖UIWindow。
/**
* 程序启动完毕就会调用一次
*/
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 1.创建window
self.window =
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// 2.设置window的背景色
self.window.backgroundColor =
[UIColor whiteColor];
// 3.显示window
[self.window makeKeyAndVisible];
return YES;
}
注意:
不推荐下面这种写法,原因是,
1.MjOneViewController是一个局部变量方法调用完之后局部变量释放,但是控制器的View还在UIWindow上,这样会出现野指针错误。
2.旋转事件也会有影响,[self.window addSubview:one.view];这种方法,相当于一个普通的View添加到UIWindow上,UIApplication并不知道根控制器。
MjOneViewController *one = [[MjOneViewController alloc] init];
[self.window addSubview:one.view];
3.在创建window的时候,要注意。
/**
* 程序启动完毕就会调用一次
*/
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 1.创建window
UIWindow *window
= [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// 2.设置window的背景色
window .backgroundColor =
[UIColor whiteColor];
// 3.显示window
[window makeKeyAndVisible];
return YES;
}
这时候,window是不能显示到窗口上的,因为这时候的window是哥局部变量,当程序启动完成之后,就会被销毁。
因此要加上,self.window
= window。window是强引用的,防止window在创建完毕就被销毁。
4.一个窗口只有一个控制器。
self.window.rootViewController
= [[UIViewController
alloc]
init];