美文网首页iOS
UIWindow的基本使用

UIWindow的基本使用

作者: 南华coder | 来源:发表于2017-01-09 11:59 被阅读464次

<h5>二、使用UIWindow</h5>

1、简介
在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIView来呈现界面。UIWindow并不包含任何默认的内容,但是它被当作UIView的容器,用于放置应用中所有的UIView。
从继承关系来看,UIWindow继承自UIView,所以UIWindow除了具有UIView的所有功能之外,还增加了一些特有的属性和方法,而我们最常用的方法,就是在App刚启动时,调用UIWindow的makeKeyAndVisible方法,代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

  self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
  QSRootViewController *rootVC = [[QSRootViewController alloc]init];
  UINavigationController *nav = [[UINavigationController alloc]   initWithRootViewController:rootVC];
  self.window.backgroundColor = [UIColor whiteColor];
  self.window.rootViewController = nav;  
  [self.window makeKeyAndVisible];  //让window成为key window,使得window可见
  return YES;
}

tips: UIWindow的主要作用有:作为UIView的最顶层容器,包含应用显示所有的UIView;传递触摸消息和键盘事件给UIView;

2、为UIWindow增加UIView
两种办法:1)通过调用addSubView方法; 2)设置其特有的rootViewController属性。设置该属性后,UIWindow会自动将view controller的view添加到当前window中,同时负责维护view controller和view的生命周期。上述在application:didFinishLaunchingWithOptions:中使用的就是这种办法。

3、系统对UIWindow的使用
通常在一个程序中只会有一个UIWindow,但有些时候我们调用系统的控件(例如UIAlertView)时,iOS系统为了保证UIAlertView在所有的界面之上,它会临时创建一个新的UIWindow,通过将其UIWindowLevel设置更高,让UIAlertView盖在所有其他UI之上。
默认程序的UIWindow的层级是UIWindowLevelNormal,当系统需要覆盖在其上覆盖UIAlertView时,就会创建一个层级是UIWindowLevelAlert的UIWindow,因为其windowLevel值更高,所以就覆盖在上面了

4、手工创建UIWindow
有些时候,我们也希望在应用开发中,将某些界面覆盖在所有界面的最上层。这个时候,我们就可以手工创建一个新的UIWindow。需要注意的是,和创建UIView不同,UIWindow一旦被创建,它就自动地被添加到整个界面上了(当然,其windowLevel要足够高)。
还有一点需要注意的是,如果我们创建的UIWindow需要处理键盘事件,那就需要合理地将其设置为keyWindow。keyWindow是被系统设计用来接收键盘和其他非触摸事件的UIWindow。我们可以通过makeKeyWindow和resignKeyWindow方法设置UIWindow实例的keyWindow与否。

P.S:在实际开发中发现,为了让UIWindow实例可见,一般需要调用makeKeyAndVisible方法,否则UIWindow实例没能正常呈现出来,简而言之,管理UIWindow的visible的方法除了makeKeyAndVisible之外没有找到类似于makeVisible的方法,控制UIWindow的visible与否的相关属性和其他UIView的属性一样,是hidden。所以,在不调用makeKeyAndVisible的情况下,UIWindow实例没能正常显示的原因是因为Window的hidden默认值为true,所以设置其为false就好了。

5、手工创建UIWindow场合
App的密码保护页面可以基于UIWindow实现的,当用户从应用的任何界面按Home键退出,过一段时间再从后台切换回来时,显示一个密码输入界面。只有用户输入了正确的密码,才能进入退出前的界面。因为这个密码输入界面可能从任何应用界面弹出,并且需要盖住所有界面的最上层,所以很合适做一个UIWindow来实现。
除了类似于支付宝钱包App的手势解锁功能界面之外,其他适合用UIWindow来实现的功能还包括:应用的启动介绍页,应用内的通知提醒消息,应用内的弹出框广告等。

[UIApplication sharedApplication].keyWindow                 //获取应用程序的主窗口
[[[UIApplication sharedApplication] delegate] window]  

6、什么是keyWindow?

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

在应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象(平时输入文字弹出的键盘,就处在一个新的UIWindow中)

[UIApplication sharedApplication].windows

附录:UIWindowLevel

  • UIWindow在显示的时候会根据UIWindowLevel进行排序的,即Level高的将排在所有Level比他低的层级的前面。
  • IOS系统中定义了三个window层级,高低顺序从小到大为Normal < StatusBar < Alert

参考链接:
UIWindow使用介绍
iOS开发基础知识:UIWindow和UIViewController
IOS UIWindow 详解

相关文章

  • UIWindow的基本使用

    二、使用UIWindow 1、简介在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow...

  • UIWindow

    UIWindow基本使用 ios程序启动完毕后,创建的第一个视图控件就是UIWindow 如果指定了main,系统...

  • UIWindow 原理与巧妙使用 makeKeyAndVisib

    - UIWindow 简介- UIWindow 概述- 我们可以使用 UIWindow 来作什么?- makeKe...

  • iOS关于UIWindow

    UIWindow简介: 在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIVi...

  • iOS --- UI 简单总结

    代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...

  • UIWindow 基本使用、与UIView的关系

    基本用法 在info.plist配置文件中取消main.storyboard的作用 写在AppDelegate.m...

  • 使用UIWindow

    UIWindow并不包含任何默认的内容,但是它被当作UIView的容器,用于放置应用中所有的UIView。UIWi...

  • UIWindow的使用

    APP从后台模式进入前台后打开指定页面 需求:前段时间在开发项目的时候,有一个需求,因为APP的一些信息比较敏感,...

  • UIwindow的使用

    1. UIWindowLevel 让UIView 和 UIWindow透明不遮挡下放操作的方法 设置父视图的的透明...

  • 利用UIWindow将View置顶

    UIWindow继承与UIView,so,UIWindow可以使用UIView很多方法,常用的就是makeKeyW...

网友评论

    本文标题:UIWindow的基本使用

    本文链接:https://www.haomeiwen.com/subject/axncbttx.html