UIWindow 中的 keyWindow

一直對(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 可以接收鍵盤事件與其他非觸摸事件。

那么我們來看一下觸摸事件的類型:

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

也就是說, 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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容