iOS应用通常只有一个窗口,它是UIWindow类的一个实例。应用在启动时创建了这个窗口,并向窗口中加入一个或多个视图,然后将其显示出来。窗口显示出来之后很少被使用,用户也不能对其进行直接关闭或者其他操作。
所有对窗口的操作都需要通过苹果官方提供的API来实现。应用可以借助窗口的实例进行事件传递,窗口的实例会持续跟踪当前的第一响应者,并在UIApplication实例发出请求时,将事件传递给它。
在UIKit中,UIWindow的父类是UIView,所以窗口也是一个视图实例,一般不用直接操作UIWindow实例中与视图相关的属性。在创建一个窗口时,应将其初始的边框尺寸设置为整个屏幕的大小,我们可以使用UIView的init方法进行初始化,传入一个CGRect结构体作为参数来决定窗口的大小。如果窗口是从nib文件中加载的,那么Interface Builder并不允许创建比屏幕尺寸小的窗口。
iOS支持将一个窗口叠放在其他窗口的上方,但这并不是推荐做法。iOS系统自身使用额外的窗口来显示系统状态条、重要警告以及位于应用程序窗口上方的其他消息,如果希望在自己的内容上方显示警告,可以使用UIKit提供的警告视图,而不是创建额外的窗口。
我们可以使用代码创建UIWindow展示在原有的窗口上,创建一个项目UIWindowPractise,在ViewController的view上添加一个按钮,并为其链接点击事件(读者可以快速阅读一下12.2一节中如何为UIButton链接点击事件的相关内容)。示例如下:(www.xing528.com)
动手写10.1.2 UIWindowPractise->ViewController.swift
当点击图10.1.6中的按钮时,触发了clickCreateButton()方法,此时创建了一个UIWindow的实例,并且设置了其大小和背景色,最后调用UIWindow的实例方法makeKeyAndVisible()。这个方法会将window展示到应用程序上,并且会将此window设置为主窗口。一般不建议开发者进行UIWindow的直接展示,能在视图层解决的问题尽量不要放到窗口层,因为一旦主窗口不是应用一开始创建的UIWindow,就会带来意想不到的麻烦,比如应用的主窗口变成了代码中创建的蓝色窗口,此时需要通过窗口的rootViewController进行其他页面的切换时,无法从UIApplication中的keyWindow属性获取到真正具有rootViewController的窗口。
图10.1.6 创建UIWindow在应用程序界面上
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。