UIWindow
UIWindow是最頂層的界面容器,繼承自UIView择同。作用如下:
- 作為UIView的最頂層容器腺怯,包含應用顯示所需要的所有UIView。
- 傳遞觸摸消息和鍵盤事件給UIView雌桑。
為UIWindow增加UIView
- 通過
addSubView
方法。 - 通過特有的
rootViewController
屬性祖今。通過設置該屬性為要添加view對應的UIViewController,UIWindow會自動將其View添加到當前window中校坑,同時負責維護ViewController和view的生命周期。
系統(tǒng)對UIWindow的使用
通常在一個程序中只會有一個UIWindow衅鹿,但是有時候調(diào)用系統(tǒng)控件時(如UIAlertView)撒踪,iOS系統(tǒng)為了保證控件在所有的界面之上,他會臨時創(chuàng)建一個新的UIWindow,通過將其UIWindow的UIWindowLevel設置得更高大渤,讓控件蓋在所有的應用界面之上制妄。
UIWindow的UIWindowLevel
屬性定義了UIWindow的層級。一共有三種取值,默認為0:
typedef CGFloat UIWindowLevel;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;
手動創(chuàng)建UIWindow
當我們想將某些界面覆蓋在所有界面的最上層時泵三,我們可以手動創(chuàng)建一個UIWindow.UIWindow一旦被創(chuàng)建耕捞,他就自動被添加到整個界面之上了。對于復雜的界面可以繼承UIWindow烫幕,在子類中寫相關邏輯俺抽,可以用單例模式創(chuàng)建等等,根據(jù)不同情況來設置较曼。
如果我們創(chuàng)建的UIWindow需要處理鍵盤事件磷斧,那就需要合理的將其設置為KeyWindow。keyWindow是被系統(tǒng)設計用來接收鍵盤和其他非觸摸事件的UIWindow.我們可以通過makeKeyWindow
和resignKeyWindow
方法來將自己創(chuàng)建的UIWindow實例設置成keyWindow.
適合用UIWindow來實現(xiàn)的功能有:密碼輸入界面、應用啟動介紹頁弛饭、應用內(nèi)的通知提醒顯示和應用內(nèi)的彈框廣告等冕末。
不要濫用UIWindow
如果彈出界面明顯屬于某個ViewController,那么更適合把彈出的界面當做這個ViewController的view的subView實現(xiàn)。
常見的濫用方式是把需要彈出的界面都設置成單例侣颂,需要的時候就調(diào)用顯示档桃,這種做法會使新創(chuàng)建的UIWindow一直得不到釋放。當出現(xiàn)多個UIWindow需要相互有層級覆蓋關系時憔晒,實現(xiàn)起來會比較復雜藻肄。