之前的自定义弹窗总是添加到keyWindow上,一直屡试不爽。最后遇到了一个bug。
bug描述:
1、在系统弹窗出现【之后】,添加到keyWindow上的视图【会】随着弹窗的消失而消失。
2、在系统弹窗出现【之前】,添加到keyWindow上的视图就【不会】随着弹窗的消失而消失。
通过上面的描述,可以看到我们可以通过2的方式来解决这个问题。但是怎样确保顺序呢?显然是不靠谱的方案。
最终解决方案:在系统弹窗出现【之前】,添加到keyWindow上的视图就【不会】随着弹窗的消失而消失。
我的demo请参考:https://github.com/wokenshin/Laboratory
全局搜索:KeyWindowVC 即可找到相关代码
那么为什么要将视图放在delegate.window上,而不是keyWindow上呢?
请看下图
如上图所述:默认情况下keyWindow和delegate.window是同一个对象(通过打印的内存地址可知)。但是当有系统弹窗出现的时候,keyWindow就变成了另外一个对象。
delegate.window 程序启动时设置的window对象
keyWindow 这个属性保存了[windows]数组中的[UIWindow]对象,