UIWindow 中的 keyWindow

一直对 keyWindow 有着误解, 以为只有 keyWindow 能响应事件, App 的其他 window 都是不管事儿, 只有显示的功能。但实际使用中, 发现如果创建一个 windowLevel 比 appDelegate.window 高的 myWindow, myWindow 也是可以响应点击事件的。那 keyWindow 有什么用呢?

在官方文档中,是这样解释的:

The value of this property is YES when the window is the key window or NO when it is not. The key window receives keyboard and other non-touch related events. Only one window at a time may be the key window.

也就是说 keyWindow 的特别之处在于相较于其他的 non-keyWindow, keyWindow 可以接收键盘事件与其他非触摸事件。

那么我们来看一下触摸事件的类型:

屏幕快照 2018-04-04 上午8.42.15.png

也就是说, non-keyWindow 与 keyWindow 都可以响应 UIEventTypeTouches, 但像 键盘输入事件加速计事件远程控制事件(例:耳机按钮控制事件)以及 物理按键点击事件 都只会向 keyWindow 发送 Event, 其他 non-KeyWindow 不会获得这个消息。

注:
在 window 上有 textField 这类可以输入的控件时, 当该控件被点击或响应编辑时, 会将该控件所在的 window 变为 keyWindow。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容