天天看點

iOS開發之UIWindow

1、概述

uiwindow是一種特殊的uiview,通常在一個app中隻會有一個uiwindow。

ios程式啟動完畢後,建立的第一個視圖控件就是uiwindow,接着建立控制器的view,最後将控制器的view添加到uiwindow上,于是控制器的view就顯示在螢幕上了。

一個ios程式之是以能顯示到螢幕上,完全是因為它有uiwindow。也就說,沒有uiwindow,就看不見任何ui界面。

iOS開發之UIWindow

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;

繼續閱讀