使用keyWindow要注意一点

前两天出去面试的时候被问到一个问题:keyWindow获取到的window会不会发生改变?

        讲真的以前用到的东西都是只要能用就行了,没有过多的取研究为什么不能用,为什么要这么用,这几天的面试让我也学好了很多东西,我们不能停留在会用的基础上了,言归正传,下班我们来看一下keyWindow什么情况下会发生改变:

首先我们先来看一下正常情况下获取到的keyWindow是哪一个window:

没有弹出层的情况下

       很明显正常情况下得到的是UIWindow类,这是我们需要的类,那么我们试一下在弹出层弹出之后,再去获取keyWindow得到的是哪一个:

有弹出层情况下

        这个时候得到的keyWindow变成了UIAlertControllerShimPresenterWindow,说明keyWindow的类发生了改变。那这个时候添加view和移除view时,view会怎么变化呢。

展示弹出层的时候
移除弹出层的时候

          这两个对比很明显,弹出前和弹出后view添加的图层发生了改变,而当移除的时候UIAlertControllerShimPresenterWindow上添加的view也被移除了。说明移除弹出层之后这个keyWindow——UIAlertControllerShimPresenterWindow 也会被移除掉 ,或者说是keyWindow类变成了UIWindow。

总结一点:

1.经过测试keyWindow永远是覆盖在视图的最外层,在正常情况下获取到的keyWindow是UIWindow;

 2.在有UIAlertView或UIActionSheet的弹出层情况下,在去获取keyWindow这个时keyWindow就会变成UIAlertControllerShimPresenterWindow这个类,是弹出层上层的一个window;

3.在UIAlertView或UIActionSheet弹出后再给keyWindow添加的view,会在UIAlertView弹出层消失后,keyWindow上边的视图也会随之消失;

  所以如果要可以使用UIApplication.shared.windows.last(获取到的图层是UIWindow)去添加view,这样又弹出层的话还是添加到系统的弹出层下,不会随着弹出层的消失而消失。

以上只是个人见解,仅供参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、问题背景 最近需求量放缓,想起了以前曾经later的小需求,也就是弹出来的AlertView中间的文本框输入一...
    唐笛_Dylan阅读 18,520评论 6 29
  • 每一个IOS程序都有一个UIWindow,在我们通过模板简历工程的时候,xcode会自动帮我们生成一个window...
    jumping鹏阅读 1,084评论 0 0
  • UIWindow是Cocoa框架的重要组件之一,所有的UIView都要通过UIWindow来进行展现,没有UIWi...
    文兴阅读 4,994评论 3 34
  • 初秋的天气,有些凉,风夹着雨吹着路人单薄的衣裳。我撑着伞在市郊等公车。 前方停下一辆长途车,下来一位中年妇女,拉着...
    田真十阅读 180评论 0 4
  • 1 、 和朋友聊天,她突然说了句:“你说,等父母都老了,我们当家做主的 时候,对于过年,我们还知道些什么?” 我想...
    SameY阅读 594评论 0 0