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

  • 相关阅读:
    从零搭建ES搜索服务(一)基本概念及环境搭建
    SpringBoot+Mybatis多模块(module)项目搭建教程
    Redis分布式锁实现方式(附有正解及错误示例)
    MySQL QA
    Netty handler处理类无法使用@Autowired注入bean的解决方法
    数组的全排列
    链表分段反转
    tomcat调优
    Spring Boot之JdbcTemplate多数据源配置与使用
    aPaaS
  • 原文地址:https://www.cnblogs.com/LongLJ/p/5008425.html
Copyright © 2011-2022 走看看