UIWindow

UIWindow是最顶层的界面容器,继承自UIView ,所以它具有UIView的所有功能,但是,更多的时候UIwindow是作为UIview的顶层容器存在,每一个ios工程都有一个UIWindow,但是不是唯一,xcode会为我们自动生成UIWindow,并让她成为keywindow并且显示出来。

那下面我们来看看系统启动过程中,系统调用UIWindow:

系统创建UIWindow代码:

self.window=[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

系统设置UIWindow的颜色:

self.window.backgroundColor=[UIColor whiteColor];

设置主窗口,并显示出来:

[self.window makeKeyAndVisible];

让窗口成为主窗口,并且显示出来。有这个方法,才能把信息显示到屏幕上。
因为Window有makekeyandvisible这个方法,可以让这个Window凭空的显示出来,而其他的view没有这个方法,所以它只能依赖于Window,Window显示出来后,view才依附在Window上显示出来。

[self.window make keywindow]//让uiwindow成为主窗口,但不显示。

系统会创建一个uiwindow但是并不是唯一的uiwindow,那我们就来谈谈什么时候系统会自动创建uiwindow,并在使用结束的时候销毁:

获取UIwindow
(1)[UIApplication sharedApplication].windows 在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象(平时输入文字弹出的键盘,就处在一个新的UIWindow中)

(2)[UIApplication sharedApplication].keyWindow(获取应用程序的主窗口)用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。

提示:如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow

(3)view.window获得某个UIView所在的UIWindow

  1. UIAlertView ,我们在使用uialertview的时候,会弹出一个对话框,显示在所有view的最前面。这是系统会自动创建一个uiwindow 并且设置UIWindowLevel 设置的更高,让UIAlertView盖在所有的应用界面之上。点击确定的时候uiwindow会自动消失。

keyWindow是指定的用来接收键盘以及非触摸类的消息,而且程序中每一个时刻只能有一个window是keyWindow。
那么这里就需要考虑一个问题uiwindow是怎么成为keywindow的呢,顺序是怎样的?

1、程序默认的window先显示出来

2、默认的window再变成keyWindow

3、AlertView的window显示出来

4、默认的window变成非keyWindow

5、最终AlertView的window变成keyWindow

那么当点击取消alertview的时候keywindow又是怎么变化的呢?

1、首先UIAlertView的window变成非keyWindow

2、程序默认的window变成keyWindow

3、UIAlertView的window在隐藏掉

总体就是“想隐居幕后可以,但得先交出权利”。

在这里要特别说明一下,UIWindowLevel 该属性定义了uiwindow的层级,层级越高,就显示在最前面,依次顺序是:

UIWindowLevelNormal
UIWindowLevelStatusBar
UIWindowLevelAlert

层级一次递增.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值