1、概述
uiwindow是一種特殊的uiview,通常在一個app中隻會有一個uiwindow。
ios程式啟動完畢後,建立的第一個視圖控件就是uiwindow,接着建立控制器的view,最後将控制器的view添加到uiwindow上,于是控制器的view就顯示在螢幕上了。
一個ios程式之是以能顯示到螢幕上,完全是因為它有uiwindow。也就說,沒有uiwindow,就看不見任何ui界面。
2、添加uiview到uiwindow中兩種常見方式
方式一:
- (void)addsubview:(uiview *)view;
直接将view添加到uiwindow中,但并不會理會view對應的uiviewcontroller
例如:
mjoneviewcontroller *one = [[mjoneviewcontroller alloc] init];
[self.window addsubview:one.view];
方式二(開發中實際使用的方法,首選):
@property(nonatomic,retain) uiviewcontroller *rootviewcontroller;
自動将rootviewcontroller的view添加到uiwindow中,負責管理rootviewcontroller的生命周期
self.window.rootviewcontroller = one;
常用方法:
- (void)makekeywindow;
讓目前uiwindow變成keywindow(主視窗)。
- (void)makekeyandvisible;
讓目前uiwindow變成keywindow,并顯示出來。
3、獲得uiwindow
[uiapplication sharedapplication].windows
在本應用中打開的uiwindow清單,這樣就可以接觸應用中的任何一個uiview對象。
(平時輸入文字彈出的鍵盤,就處在一個新的uiwindow中)
[uiapplication sharedapplication].keywindow
用來接收鍵盤以及非觸摸類的消息事件的uiwindow,而且程式中每個時刻隻能有一個uiwindow是keywindow。如果某個uiwindow内部的文本框不能輸入文字,可能是因為這個uiwindow不是keywindow。
view.window
獲得某個uiview所在的uiwindow。
【備注】一個空項目中,appdelegate類遵守了uiapplicationdelegate協定,之後在相應事件發生時候uiapplication會通知它的delegate對象,比如,當應用啟動完畢會uiapplication會通知appdelegate,之後會自動調用appdelegate中的didfinishlaunchingwithoptions,這時直接啟動之時一個黑的界面,沒有任何東西。要想顯示東西,首先要用set方法往裡面添加一個uiwindow:
self.window =
[[uiwindow alloc]initwithframe[uiscreen mainscreen].bounds];
添加過還不能顯示,因為可能存在多個uiwindow,我們要調用get方法擷取剛才設定的uiwindow把它設定為主視窗并且顯示出來:
[self.window makekeyandvisible];
之後顯示的就是這個uiwindow了,我們之後就可以往這個uiwindow中添加控制器(相當于android中的activity),添加時要添加為根控制器這個控制器才能顯示出來:
self.window.rootviewcontroller =
myviewcontroller;