[iOS基础控件-6.10.7]UIWindow

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

A.UIWindow概念

1.继承UIView,是一种特殊的UIView

2.通常一个APP只有一个UIWindow

3.iOS程序启动后,创建的第一个视图就是UIWindow

4.没有UIWindow,不能显示任何东西

B.使用

1.创建一个Emptyapplication项目

没有了storyboard,要手动实现UIWindow的创建代码(其实这就是storyboard做的事情)

1//手动创建UIWindow,并加到screen上2self.window =[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];3self.window.backgroundColor =[UIColor whiteColor];4[self.window makeKeyAndVisible];

2.创建一个控制器

3.把控制器的view添加到UIWindow

添加UIView到UIWindow中两种常见方式:

- (void)addSubview:(UIView *)view;

直接将view添加到UIWindow中,但并不会理会view对应的UIViewController

@PRoperty(nonatomic,retain) UIViewController *rootViewController;

自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的生命周期

常用方法

- (void)makeKeyWindow;

让当前UIWindow变成keyWindow(主窗口)

- (void)makeKeyAndVisible;

让当前UIWindow变成keyWindow,并显示出来

(1)直接添加控制器的view到UIWindow

1//添加控制器2ViewController *controller =[[ViewController alloc] init];3[self.window addSubview:controller.view];

不建议此方法,因为

a.可能自定义控制器变量被销毁之后,其view还在UIWindow中被使用,如果再使用控制器会引起崩溃

b.由于没有传自定义控制器给UIWindow,不能处理各种相关事件(例如屏幕旋转)

(2)设置自定义控制器为UIWindow的rootViewController

设置了根控制器之后,会自动把自定义控制器的view加到UIWindow

1//添加控制器2ViewController *controller =[[ViewController alloc] init];3//[self.window addSubview:controller.view];4self.window.rootViewController = controller;

(3)在controller中设置状态栏可视

1-(BOOL)prefersstatusBarHidden {2returnNO;3}

4.界面切换

其实是不同的控制器替换到UIWindow上面

改变self.window.rootViewController

C.app四大对象的关系

D.UIWindow的其他概念

1.主窗口

a.获得主窗口 [UIApplication sharedWindow].keyWindow

b.可以通过makeKeyWindow设置主窗口,makeKeyAndVisible来设置主窗口兼可视

c.一个屏幕只能有一个主窗口,使用最后更新(最后使用makeKeyWindow或者makeKeyAndVisible)的UIWindow为主窗口

d.iOS7之前只有主窗口能够处理TextField输入事件,之后全部窗口都能处理

1//手动创建UIWindow,并加到screen上2self.window =[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];3self.window.backgroundColor =[UIColor grayColor];4[self.window makeKeyAndVisible];//此刻window是主窗口56//手动在.h文件中定义了一个window2,不能使用临时变量,否则会被回收7self.window2 = [[UIWindow alloc] initWithFrame:CGRectMake(100,100,100,100)];;8self.window2.backgroundColor =[UIColor redColor];9[self.window2 makeKeyAndVisible];//这时候window2是主窗口

2.屏幕上的所有窗口

[UIApplication sharedApplication].windows

在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象

(平时输入文字弹出的键盘,就处在一个新的UIWindow中)

[UIApplication sharedApplication].keyWindow

用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow

view.window

获得某个UIView所在的UIWindow

3.TextField呼出的键盘是一个独立的window

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航