多控制器之UIWindow

 

UIWindow

简介

  • UIWindow是一种特殊的UIView,通常一个app中至少有一个UIWindow
  • 程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上

创建和相关属性

  • 应用程序的启动原理中,第四步中如果有Main

    Info.plist文件,判断有没有Main,如果有,会去加载Main.storyBoard
    1.创建一个窗口UIWindow
    2.帮你创建Main.storyBoard当中箭头指向的控制器,它会把控制器设为窗口的根控制器,
      并且,把控制器的View添加到窗口中
    3.显示窗口
  • 如果没有指定的Main的话,就需要手动的去创建窗口

    - 1.创建窗口
    - 2.设置窗口的根控制器
    - 3.显示窗口
    - 4.注意:从ios9之后,如果一个应用程序有多个窗口时,控制器就把状态栏给隐藏,解决办法:把状态栏交给应用程序管理
    // 1.创建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    // 2.设置窗口的根控制器
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor yellowColor];
    self.window.rootViewController = vc;
    
    // 3.显示窗口
    [self.window makeKeyAndVisible];

    注:[self.window makeKeyAndVisible]的底层实现:

    1.让窗口成为显示状态
    窗口默认是隐藏的.hidden = yes;
    底层做的事件就是:self.window.hidden = NO;
    2.把控制器的view添加到窗口上面
    [self.window addSubView:rootVC.view]; // rootVC根控制器
    3.把当前窗口设置成应用程序的主窗口
    application.keyWindow 获得应用程序的主窗口
  • 添加键盘(ios中键盘和状态栏都是窗口)

    // 创建一个UITextField,用来点击启动键盘
    UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    // 让UITextField成为第一响应者
    [tf becomeFirstResponder];
    // 控制器添加UITextField
    [vc.view addSubview:tf]; // vc为当前根控制器
  • UIWindow中的层级

    设置window的层级.UIWindowLevelNormal它是⼀一个CGFloat类型.self.window.windowLevel = UIWindowLevelNormalUIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert

posted @ 2015-11-30 21:15  LongLJ  阅读(383)  评论(0编辑  收藏  举报