美文网首页
UIWindow小结

UIWindow小结

作者: 小沛2016 | 来源:发表于2020-07-01 17:42 被阅读0次

何为UIWindow?

个人理解就是app最上层的一个view,手势传递到本APP的始点

获取方法

[[UIApplication sharedApplication]windows].lastObject;

获取最后一个window,但有可能不是当前的window

[[UIApplication sharedApplication] keyWindow];

当前的window (有时候不准,不准的情况下面会说)

[[UIApplication sharedApplication].delegate window];

系统原来的window (appdegete的那个) 不是自己后面加的

特殊情况之获取到的window不准

在某些页面可能会弹出UIAlertView,这时候如果点掉UIAlertView后,在用 [[UIApplication sharedApplication] keyWindow]代码来获取的话,确实获取到的不是当前的window,是系统的

验证

通过下面的几个通知可以尝试验证一波
UIWindowDidBecomeKeyNotification
UIWindowDidResignKeyNotification
UIWindowDidBecomeVisibleNotification
UIWindowDidBecomeHiddenNotification

- (void)initNotification {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowBecomeKey:) name:UIWindowDidBecomeKeyNotification object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowResignKey:) name:UIWindowDidResignKeyNotification object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowBecomeVisible:) name:UIWindowDidBecomeVisibleNotification object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowBecomeHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];
}

- (void)windowBecomeKey:(NSNotification*)noti {
    NSArray *windows = [UIApplication sharedApplication].windows;
    NSLog(@"count == %ld", windows.count);
    NSLog(@"keyWindow == %@",[[UIApplication sharedApplication] keyWindow]);
    NSLog(@"keyWindow.p == %p",[[UIApplication sharedApplication] keyWindow]);
}

- (void)windowResignKey:(NSNotification*)noti {
    NSArray *windows = [UIApplication sharedApplication].windows;
    NSLog(@"count == %ld", windows.count);
    NSLog(@"keyWindow == %@",[[UIApplication sharedApplication] keyWindow]);
    NSLog(@"keyWindow.p == %p",[[UIApplication sharedApplication] keyWindow]);
}

- (void)windowBecomeVisible:(NSNotification*)noti {
    NSArray *windows = [UIApplication sharedApplication].windows;
    NSLog(@"count == %ld", windows.count);
    NSLog(@"keyWindow == %@",[[UIApplication sharedApplication] keyWindow]);
    NSLog(@"keyWindow.p == %p",[[UIApplication sharedApplication] keyWindow]);
}
- (void)windowBecomeHidden:(NSNotification*)noti
{
   
    NSArray *windows = [UIApplication sharedApplication].windows;
    NSLog(@"count == %ld", windows.count);
    NSLog(@"keyWindow == %@",[[UIApplication sharedApplication] keyWindow]);
    NSLog(@"keyWindow.p == %p",[[UIApplication sharedApplication] keyWindow]);
}

如何解决?

在一般的uiview上都有一个window的属性,可以通过这个方法去获取自己想要的window。

相关文章

  • UIWindow小结

    UIWindow介绍 lUIWindow是一种特殊的UIView,通常在一个app中至少会有一个UIWindow ...

  • UIWindow小结

    何为UIWindow? 个人理解就是app最上层的一个view,手势传递到本APP的始点 获取方法 [[UIApp...

  • UIWindow

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

  • UIWindow 原理与巧妙使用 makeKeyAndVisib

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

  • UIWindow、UIView、CALayer

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

  • UIWindow讲解

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

  • iOS开发之UIWindow的使用

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

  • iOS 开发- UI篇-UIWindow介绍

    UIWindow 简单介绍原文链接? iOS开发UI篇—UIWindow简单介绍 一、简单介绍 UIWindow是...

  • iOS --- UI 简单总结

    代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...

  • iOS关于UIWindow

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

网友评论

      本文标题:UIWindow小结

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