添加多个UIWindow时,使用keyWindow要注意一点

最近的项目里有个关于创建多个uiwindow时使用keywindow出现的bug。

有个任务是在打开信息展示时,要求不被任何东西遮挡。这里设计方案是添加一个新的HXUIWindow继承与UIWindow。测试时打开了HXUIWindow显示在屏幕上,执行打开 弹框 按钮(uiactionsheet或uialerview),当弹框消失后,再执行向主页最外层添加一个view,这个时候应该会想到用[[UIApplication sharedApplication].keyWindow addSubview:view],这个时候问题出现了,程序将view添加到了HXUIWindow上,而HXUIwindow大小只有100*100,所以超出的内容没有点击事件。

这是为什么呢?因为这个时候[UIApplication sharedApplication].keyWindow 是HXUIWindow而不是程序最开始默认的那个[[[UIApplication sharedApplication] delegate] window]。这又是为什么呢,因为这里执行了打开 弹框 按钮(uiactionsheet或uialerview),当打开(uiactionsheet或uialerview)时,程序为了让弹框出现在最外层,会新建一个临时的uiwindow,并且层级最高,还将keywindow赋值与它。当弹框消失后keywindow将转向另一个uiwindow,这个时候转向了HXUIWindow,因为HXUIWindow层级最高,在windows里层级拍最后面。刚开始的时候只有[[[UIApplication sharedApplication] delegate] window],所以其为keywindow,当然也是有因为设置为keywindow的原因,只有添加HXUIWindow时没有改变keywindow的值,当弹窗弹出后keywindow会将指向弹框弹出后新建的uiwindow,弹窗消失时keywindow又将重新指向,这个时候其会将指向层级最高的uiwindow,所以指向了HXUIWindow了。


总结:

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

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

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

4.会在UIAlertView弹出层消失后,keyWindow指向视图最外层的HXUIWindow了,之后添加到[[UIApplication sharedApplication].keyWindow 上的uiview都将添加到HXUIWindow上了;


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值