UIWindow
UIWindow —> UIView
一、
常用方法
1.- ( void )makeKeyWindow;
让当前 UIWindow 变成 keyWindow (主窗口)
2.- ( void )makeKeyAndVisible;
让当前 UIWindow 变成 keyWindow ,并显示出来
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。
用来接收键盘以及非触摸类的消息事件的 UIWindow ,而且程序中每个时刻只能有一个 UIWindow 是 keyWindow 。如果某个 UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow,主要针对IOS6。
4.[UIApplication sharedApplication].windows
打印出屏幕上有多少 window。
注意:
打印出屏幕上有多少 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 ;
}
* 程序启动完毕就会调用一次
*/
- ( 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];
[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 ;
}
* 程序启动完毕就会调用一次
*/
- ( 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
];