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 可以接收键盘事件与其他非触摸事件。

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

UIWindow 中的 keyWindow_第1张图片
屏幕快照 2018-04-04 上午8.42.15.png

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

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

你可能感兴趣的:(UIWindow 中的 keyWindow)