详解iOS设计中的UIWindow使用

2020-01-14 16:32:25王振洲

从图中可以看出,虽然我们自己新建了一个然后设置为keyWindow并显示,但是点击程序中默认window上添加的textField还是可以唤出键盘,而且还可以正常接受键盘输入,只是键盘被挡住了,说明非keyWindow也是可以接受键盘消息,这一点和文档上说的不太一样。
 
  观察UIWindow的文档,我们可以发现里面有四个关于window变化的通知:
 
  


UIWindowDidBecomeVisibleNotification
 
  UIWindowDidBecomeHiddenNotification
 
  UIWindowDidBecomeKeyNotification
 
  UIWindowDidResignKeyNotification

 
  这四个通知对象中的object都代表当前已显示(隐藏),已变成keyWindow(非keyWindow)的window对象,其中的userInfo则是空的。于是我们可以注册这个四个消息,再打印信息来观察keyWindow的变化以及window的显示,隐藏的变动。
 
  代码如下:
详解iOS设计中的UIWindow使用
根据打印的信息我们可以看出流程如下:
 
  1、程序默认的window先显示出来
 
  2、默认的window再变成keyWindow
 
  3、AlertView的window显示出来
 
  4、默认的window变成非keyWindow
 
  5、最终AlertView的window变成keyWindow
 
  总体来说就是“要想当老大(keyWindow),先从小弟(非keyWindow)开始混起” 而且根据打印的信息我们同事可以知道默认的window的level是0,即normal级别;AlertView的window的level是1996,比Alert级别稍微低了一点儿。
 
  b、当我们打开viewDidAppear中“[self presentActionSheet];”的时候,控制台输出如下:  

详解iOS设计中的UIWindow使用

keyWindow的变化和window的显示和上面的流程一样,同时我们可以看出ActionSheet的window的level是2001。
 
  c、接着上一步,我们点击弹出ActionSheet的cancel的时候,控制台输出如下: