·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> [iOS基础控件-6.10.7]UIWindow

[iOS基础控件-6.10.7]UIWindow

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23
A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindow,不能显示任何东西   Image(187)   B.使用 1.创建一个Empty application项目 没有了storyboard,要手动实现UIWindow的创建代码(其实这就是storyboard做的事情)
1     // 手动创建UIWindow,并加到screen上
2     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
3     self.window.backgroundColor = [UIColor whiteColor];
4     [self.window makeKeyAndVisible];
  2.创建一个控制器 Image(188)   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     // 添加控制器
2     ViewController *controller = [[ViewController alloc] init];
3     [self.window addSubview:controller.view];
  不建议此方法,因为 a.可能自定义控制器变量被销毁之后,其view还在UIWindow中被使用,如果再使用控制器会引起崩溃 b.由于没有传自定义控制器给UIWindow,不能处理各种相关事件(例如屏幕旋转) Image(189)   (2)设置自定义控制器为UIWindow的rootViewController 设置了根控制器之后,会自动把自定义控制器的view加到UIWindow
1     // 添加控制器
2     ViewController *controller = [[ViewController alloc] init];
3 //    [self.window addSubview:controller.view];
4     self.window.rootViewController = controller;
  (3)在controller中设置状态栏可视
1 - (BOOL)prefersstatusBarHidden {
2     return NO;
3 }
  Image(190)     4.界面切换 其实是不同的控制器替换到UIWindow上面 改变self.window.rootViewController     C.app四大对象的关系 Image(191)   D.UIWindow的其他概念 1.主窗口     a.获得主窗口 [UIApplication sharedWindow].keyWindow     b.可以通过makeKeyWindow设置主窗口,makeKeyAndVisible来设置主窗口兼可视     c.一个屏幕只能有一个主窗口,使用最后更新(最后使用makeKeyWindow或者makeKeyAndVisible)的UIWindow为主窗口     d.iOS7之前只有主窗口能够处理TextField输入事件,之后全部窗口都能处理  
1     // 手动创建UIWindow,并加到screen上
2     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
3     self.window.backgroundColor = [UIColor grayColor];
4     [self.window makeKeyAndVisible]; // 此刻window是主窗口
5    
6     // 手动在.h文件中定义了一个window2,不能使用临时变量,否则会被回收
7     self.window2 = [[UIWindow alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];;
8     self.window2.backgroundColor = [UIColor redColor];
9     [self.window2 makeKeyAndVisible]; // 这时候window2是主窗口
  Image(192)   2.屏幕上的所有窗口 [UIApplication sharedApplication].windows 在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象 (平时输入文字弹出的键盘,就处在一个新的UIWindow中)   [UIApplication sharedApplication].keyWindow 用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow   view.window
获得某个UIView所在的UIWindow   3.TextField呼出的键盘是一个独立的window