UIWindow探究
来源:互联网 发布:删除json数组指定元素 编辑:程序博客网 时间:2024/06/05 05:36
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。
获取window有以下三种方式:
(1)[UIApplication sharedApplication].windows 在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象(平时输入文字弹出的键盘,就处在一个新的UIWindow中);
(2)[UIApplication sharedApplication].keyWindow(获取应用程序的主窗口)用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow;
注:非keyWindow 也是可以接受键盘消息、如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow
(3)view.window获得某个UIView所在的UIWindow。
UIWindowLevel:
我们知道UIWindow 有三个层级,分别是Normal ,StatusBar,Alert.输出他们三个层级的值,我们发现从左到右依次是0,1000,2000,也就是说Normal级别是最低的,StatusBar处于中级,Alert级别最高。而通常我们的程序的界面都是处于Normal这个级别的,系统顶部的状态栏应该是处于StatusBar级别,UIActionSheet和UIAlertView这些通常都是用来中断正常流程,提醒用户等操作,因此位于Alert级别。
根据window显示级别优先原则,级别高的会显示在最上层,级别低的在下面,我们程序正常显示的view在最底层;
对于keyWindow的认识:
keyWindow是指定的涌来接收键盘以及非触摸类的消息,而且程序中每一个时刻只能有一个window是keyWindow。
@property(nonatomic,readonly) NSArray *windows;跟keywindow
干嘛还弄个数组,结果一测试才知道输出来以后,除了window还有UITextEffetsWindow。网上查了keywindow是指当前活跃的window,与用户交互的window。而windows是指当前app打开的所有window,比如键盘也在一个window里面,alert也在一个window里面。在windows数组里面,window是根据windowLevel来排列的,最后一个覆盖在最上面。这里的windows数组不包括系统提供的window,比如说状态栏就是在一个系统创建的window里面
注意:keyWindow不是一成不变的,当你创建alertView或者ActionSheet的时候,它们所在的window会变成keyWindow。也就是说系统默认创建的window首先变成keywindow,而当弹框的时候,alertView所在的window变成keywindow,默认的keywindow变成非key window。
注意:本文参考了一些文档,由于没找到联系人,因此不能致谢,在此表示感谢。
- UIWindow探究
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWINDOW
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- UIWindow
- CString与 char *之间的转换
- 小谈JAVA异常
- Vitamio中文API文档(3)—— MediaController
- POJ 2777 Count Color (线段树区间更新 位压缩)
- 监理工程师岁月--杀人事件
- UIWindow探究
- C++中delete和delete[]的区别
- LeetCode 110 Balanced Binary Tree
- java调用kettle工具类
- 一个Demo看URL和URI的区别
- 各种排序算法的分析及java实现
- SpringMVC 注解
- java.lang.UnsupportedOperationException
- 11.27、12.4 实验