zoukankan      html  css  js  c++  java
  • 多控制器之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

  • 相关阅读:
    提高开发效率
    layer的alert图
    javascript改写 <select>checked的选中,并不会出发change事件,太好了!
    $.ajax 在请求没有完成,是可以往下继续执行js代码的
    解决 hibernate cannot define positional parameter after any named parameters have been defined
    el表达式便利map集合
    c/c++ 多线程 std::call_once的应用
    c/c++ 多线程 std::call_once
    c/c++ 多线程 unique_lock的使用
    c/c++ 多线程 层级锁
  • 原文地址:https://www.cnblogs.com/LongLJ/p/5008425.html
Copyright © 2011-2022 走看看