首页 > 代码库 > UIWindow

UIWindow

UIWindow
UIWindow —> UIView

一、常用方法
1.- (
void)makeKeyWindow;
让当前UIWindow变成keyWindow(主窗口)

2.- (
void)makeKeyAndVisible;
让当前UIWindow变成keyWindow,并显示出来
注意:
1.makeKeyAndVisible就意味着,让window成为主窗口,并且可见。
2.窗口可以设置很多个,但是UIWindow有且只有一个主窗口。

3.[UIApplication sharedApplication].keyWindow
用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindowkeyWindow如果某个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 allocinitWithFrame:[[UIScreen mainScreenbounds]];
    
// 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 allocinit];
[self.window addSubview:one.view];

3.在创建window的时候,要注意。
/**
 *  
程序启动完毕就会调用一次
 */

- (
BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
// 1.创建window
    
UIWindow *window= [[UIWindow allocinitWithFrame:[[UIScreen mainScreenbounds]];
    
// 2.设置window的背景色
    
window .backgroundColor = [UIColor whiteColor];
    
// 3.显示window
    [
window makeKeyAndVisible];
    
return YES;
}

这时候,window是不能显示到窗口上的,因为这时候的window是哥局部变量,当程序启动完成之后,就会被销毁。
因此要加上,self.window = window。window是强引用的,防止window在创建完毕就被销毁。

4.一个窗口只有一个控制器。
self.window.rootViewController= [[UIViewControlleralloc]init];

UIWindow