添加多个UIWindow时,使用keyWindow要注意一点
来源:互联网 发布:汇川plc编程电缆 编辑:程序博客网 时间:2024/06/05 02:19
最近的项目里有个关于创建多个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上了;
- 添加多个UIWindow时,使用keyWindow要注意一点
- 添加多个UIWindow时,使用keyWindow要注意一点
- UIWindow的一点儿思考 keyWindow
- 横屏下UIWindow添加多个view自动旋转的解决方案
- 横屏下UIWindow添加多个view自动旋转的解决方案
- 使用RegSetValueEx时要注意的一点问题
- 使用ValidationSummary控件时设置ShowMessageBox要注意的一点
- FTPClient 处理多个文件时注意添加completePendingCommand
- 使用stringstream时需要注意的一点
- UIMenuController的UIWindow不是KeyWindow也会让UIMenuController不显示哦~
- UIMenuController的UIWindow不是KeyWindow也会让UIMenuController不显示哦~
- UIMenuController的UIWindow不是KeyWindow也会让UIMenuController不显示哦~
- keyWindow
- 多个uiwindow 的可见性
- UIWindow 使用
- MSDN使用的一点注意
- [UIApplication sharedApplication].keyWindow 添加视图无效,解决方案。
- Keywindow添加子视图不显示
- jsp跳转到servlet 出现 404 路径错误的问题解决办法
- spring boot(六):如何优雅的使用mybatis
- Glide系列之七:实现带进度的Glide图片加载功能
- C# protobuf的使用方法
- Mysql索引的查看,创建,删除
- 添加多个UIWindow时,使用keyWindow要注意一点
- 应用层检测U盘事件
- Python 爬取百度图片
- (13)intellij plugins-- markdown
- hive
- react native初识
- 模型评估与选择(番外1)-比较检验与偏方差分析
- 编程学习方式-前端实战学习
- 谈谈API功能测试