zoukankan      html  css  js  c++  java
  • UIWindow小常识

    •UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow
    •iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
    •一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow
    •也就说,没有UIWindow,就看不见任何UI界面
     
    一般在程序启动完毕时创建和设置Window
    所以在这个UIApplication代理方法中创建Window

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

     

     

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

     

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

    // 不推荐原因:创建的控制器为局部变量,出了

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

     方法将会销毁,这是很严重的事情,View还在控制器销毁了,容易形成野指针错误

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

     

     

    2.@property(nonatomic,retain) UIViewController *rootViewController;
     
    // 推荐原因:rootViewController属性是强指针,不会销毁,只要rootViewController还在控制器就在,控制器在View就在

     

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

     

     

    •常用方法

     

    - (void)makeKeyWindow;

     

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

     

     

     

    - (void)makeKeyAndVisible;

     

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

     

     

    #import "LMPAppDelegate.h"
    #import "LMPViewController.h"
    
    @implementation LMPAppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // 创建 Window
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // 设置Window颜色
        // 建议:最好不要设置Window颜色,因为View假如没有设置颜色容易被设置颜色的Window盖住,View里设置颜色即可
    //    self.window.backgroundColor = [UIColor blueColor];
        // 创建控制器
        LMPViewController *oneView = [[LMPViewController alloc] init];
        
        // 将控制器的View添加到Window中
    //    [self.window addSubview:oneView.view];
        
        // 强烈推荐使用这种方法
        // 设置Window的根控制器
        self.window.rootViewController = oneView;
        
        // 显示Window
        [self.window makeKeyAndVisible];
        return YES;
    }

    UIWindow的获得:

    [UIApplication sharedApplication].windows

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

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

    [UIApplication sharedApplication].keyWindow

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

    view.window

    获得某个UIView所在的UIWindow

  • 相关阅读:
    JavaScript语言基础
    IP地址分类及CIDR划分方法
    Python静态方法实现单实例模式
    【转载】http和socket之长连接和短连接
    DDoS攻击
    Vue自定义过滤器
    解决跨域问题
    微信菜单创建
    canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球
    Bootstrap CSS概览代码文字标注篇
  • 原文地址:https://www.cnblogs.com/pocket-mood/p/4415853.html
Copyright © 2011-2022 走看看