《iOS进阶》-UIWindow

UIWindow

UIWindow是最顶层的界面容器,继承自UIView。作用如下:

  • 作为UIView的最顶层容器,包含应用显示所需要的所有UIView。
  • 传递触摸消息和键盘事件给UIView。

为UIWindow增加UIView

  • 通过addSubView方法。
  • 通过特有的rootViewController属性。通过设置该属性为要添加view对应的UIViewController,UIWindow会自动将其View添加到当前window中,同时负责维护ViewController和view的生命周期。

系统对UIWindow的使用

通常在一个程序中只会有一个UIWindow,但是有时候调用系统控件时(如UIAlertView),iOS系统为了保证控件在所有的界面之上,他会临时创建一个新的UIWindow,通过将其UIWindow的UIWindowLevel设置得更高,让控件盖在所有的应用界面之上。

UIWindow的UIWindowLevel属性定义了UIWindow的层级。一共有三种取值,默认为0:

typedef CGFloat UIWindowLevel;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;

手动创建UIWindow

当我们想将某些界面覆盖在所有界面的最上层时,我们可以手动创建一个UIWindow.UIWindow一旦被创建,他就自动被添加到整个界面之上了。对于复杂的界面可以继承UIWindow,在子类中写相关逻辑,可以用单例模式创建等等,根据不同情况来设置。

如果我们创建的UIWindow需要处理键盘事件,那就需要合理的将其设置为KeyWindow。keyWindow是被系统设计用来接收键盘和其他非触摸事件的UIWindow.我们可以通过makeKeyWindowresignKeyWindow方法来将自己创建的UIWindow实例设置成keyWindow.

适合用UIWindow来实现的功能有:密码输入界面、应用启动介绍页、应用内的通知提醒显示和应用内的弹框广告等。

不要滥用UIWindow

如果弹出界面明显属于某个ViewController,那么更适合把弹出的界面当做这个ViewController的view的subView实现。

常见的滥用方式是把需要弹出的界面都设置成单例,需要的时候就调用显示,这种做法会使新创建的UIWindow一直得不到释放。当出现多个UIWindow需要相互有层级覆盖关系时,实现起来会比较复杂。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,476评论 0 1
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,442评论 1 14
  • 《望安》 离岛上居住的渔民,在季风期的半年中会离开离岛,前往邻近的海港打工。 女人则抱着孩子走进庙宇祈福,或走上岛...
    流年2016阅读 1,567评论 0 0
  • 在你知道你终于要放弃ta的时候,心情是复杂的。你有点难过,有点舍不得,又有点放弃执念的豁然开朗和骄傲。竟然为能够...
    快乐昕阅读 1,540评论 1 4
  • 我像着了魔的狗 疯狂的刨开雅虎以及新浪 以狗的名字开始 注册了好几个带着好几个八的邮箱 我把记住和忘记的 都一一放...
    唐晟艺阅读 2,372评论 0 1

友情链接更多精彩内容