美文网首页
UIWindow的坑

UIWindow的坑

作者: 小_梦 | 来源:发表于2021-09-22 09:15 被阅读0次

自定义创建Window

self.window1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 400, 150, 150)];
UIViewController *vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor redColor];
self.window1.rootViewController = vc1;
self.window1.windowLevel = 9;
[self.window1 makeKeyAndVisible];

  • 注意: [window makeKeyWindow];
    window.hidden = NO;
    等价与
    [self.window2 makeKeyAndVisible];

UIApplication.sharedApplication.delegate.window和UIApplication.sharedApplication.keyWindow有什么区别?

  1. [UIApplication sharedApplication].keyWindow
    是设备上当前正在显示的窗口。这通常是您应用程序的窗口,但也可能是系统窗口
  2. [UIApplication sharedApplication].delegate.window
    是AppDelegate中定义的属性窗口,是主window;
    @property (strong, nonatomic) UIWindow *window;
  3. [UIApplication sharedApplication].windows.firstObject
    等价于
    [UIApplication sharedApplication].delegate.window
  4. [UIApplication sharedApplication].windows.lastObject
  5. [[UIApplication sharedApplication]windows].lastObject
    用来获取当前屏幕上最上层的一个UIWindow,但有可能不是当前的window
- (void)alertView {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"测试" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确认", nil];
    [alertView show];
    
//    UIWindow *window = [UIApplication sharedApplication].keyWindow; //是上面alert的window
    UIWindow *window = [UIApplication sharedApplication].delegate.window;// 是AppDelegate中定义的属性窗口
    UILabel *tempLabel =[[UILabel alloc]initWithFrame:CGRectMake(150, 150, 100, 20)];
    tempLabel.font = [UIFont systemFontOfSize:16];
    tempLabel.backgroundColor = [UIColor purpleColor];
    tempLabel.text = @"测试window";
    
    [window addSubview:tempLabel];
    
}
  • 注意:UIWindow *window = [UIApplication sharedApplication].keyWindow,如果使用这个的时候,下面的tempLabel就会添加到UIAlertView所在的_UIAlertControllerShimPresenterWindow层,当alert消失的时候,对应的windows和tempLabel都会释放

窗口的定义:

https://developer.apple.com/documentation/uikit/uiwindow?language=objc

相关文章

  • UIWindow、UIView、CALayer

    UIWindow的windowLevel属性 UIWindow简单介绍 UIWindow详解及踩坑 UIWindo...

  • UIWindow的坑

    自定义创建Window 注意: [window makeKeyWindow];window.hidden = NO...

  • UIWindow的那些坑文章

    问题背景 起因是接手了一个状态栏自定义view的UI显示问题,原本以为只是一个简答的UI问题,没想到在自测以及验证...

  • UIWindow

    目录:1、UIWindow简介2、UIWindow的创建3、获取UIWindow 1、UIWindow简介 UIW...

  • UIWindow的一些坑

    UIWindow继承自UIView,其初始化方法有两个,init;和initWithFrame:使用initWit...

  • UIWindow详解及踩坑

    一、问题背景 最近需求量放缓,想起了以前曾经later的小需求,也就是弹出来的AlertView中间的文本框输入一...

  • UIWindow 原理与巧妙使用 makeKeyAndVisib

    - UIWindow 简介- UIWindow 概述- 我们可以使用 UIWindow 来作什么?- makeKe...

  • iOS开发之UIWindow的使用

    一、UIWindow简介 UIWindow是最顶级的界面容器。UIWindow继承自UIView。 UIWindo...

  • UIWindow讲解

    1.UIWindow & UIWindowLevel 一、简单介绍UIWindow是什么? UIWindow是一种...

  • iOS关于UIWindow

    UIWindow简介: 在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIVi...

网友评论

      本文标题:UIWindow的坑

      本文链接:https://www.haomeiwen.com/subject/rgvbhltx.html