一直對(duì) keyWindow 有著誤解, 以為只有 keyWindow 能響應(yīng)事件, App 的其他 window 都是不管事兒, 只有顯示的功能。但實(shí)際使用中, 發(fā)現(xiàn)如果創(chuàng)建一個(gè) windowLevel 比 appDelegate.window 高的 myWindow, myWindow 也是可以響應(yīng)點(diǎn)擊事件的。那 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 可以接收鍵盤事件與其他非觸摸事件。
那么我們來看一下觸摸事件的類型:

也就是說, non-keyWindow 與 keyWindow 都可以響應(yīng) UIEventTypeTouches, 但像 鍵盤輸入事件 、 加速計(jì)事件 、遠(yuǎn)程控制事件(例:耳機(jī)按鈕控制事件)以及 物理按鍵點(diǎn)擊事件 都只會(huì)向 keyWindow 發(fā)送 Event, 其他 non-KeyWindow 不會(huì)獲得這個(gè)消息。
注:
在 window 上有 textField 這類可以輸入的控件時(shí), 當(dāng)該控件被點(diǎn)擊或響應(yīng)編輯時(shí), 會(huì)將該控件所在的 window 變?yōu)?keyWindow。