iOS開發UI篇 UIWindow簡單介紹

2022-07-29 01:36:10 字數 2642 閱讀 2767

ios開發ui篇—uiwindow簡單介紹

一、簡單介紹

ios程式啟動完畢後,建立的第乙個檢視控制項就是uiwindow,接著建立控制器的view,最後將控制器的view新增到uiwindow上,於是控制器的view就顯示在螢幕上了

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

新增

先建立uiwindow,再建立控制器,建立控制器的view,然後將控制器的view新增到uiwindow上。

文件中關於該部分的解釋:

二、uiwindow的建立過程

1.簡單說明

建立乙個空的專案,就可以看到uiwindow是怎麼出來的了。在程式啟動完畢之後就會呼叫一次,建立過程如下:

2.把view新增到uiwindow

建立乙個控制器,把view新增到uiwindow上面(有兩種方式)

(1)直接將控制器的view新增到uiwindow中,並不理會它對應的控制器

[self.window  addsubview:vc.view];

(2)設定uiwindow的根控制器,自動將rootviewcontroller的view新增到window中,負責管理rootviewcontroller的生命週期

[self.window.rootviewcontroller=vc];

兩個方法的區別:

以後的開發中,建議使用(2).因為方法(1)存在一些問題,比如說控制器上面可能由按鈕,需要監聽按鈕的點選事件,如果是1,那麼按鈕的事件應該由控制器來進行管理。但控制器是乙個區域性變數,控制器此時已經不存在了,但是控制器的view還在,此時有可能會報錯。注意:方法執行完,這個控制器就已經不存在了。

問題描述1:當view發生一些事件的時候,通知控制器,但是控制器已經銷毀了,所以可能出現未知的錯誤。

3.在有storyboard的專案中,uiwindow是如何建立的?

為什麼建立乙個storyboard,沒有看到建立uiwindow的過程?

它其實是把建立uiwindow的過程給遮蔽起來了。可以把**的uiwindow的屬性的值列印出來nslog(@「window=%p」,self.window);列印出來確實是有值的,說明確實建立了uiwindow.不僅建立了uiwindow,預設還建立了uiwindow對應的控制器,也可以列印進行檢視。nslog(@「%@「,self.window.rootviewcontroller);

有storyboard的專案中的建立過程:

三、如何獲取window?

1.主視窗和次視窗

【self.window makekeyandvisible】讓視窗成為主視窗,並且顯示出來。有這個方法,才能把資訊顯示到螢幕上。

因為window有makekeyandvisible這個方法,可以讓這個window憑空的顯示出來,而其他的view沒有這個方法,所以它只能依賴於window,window顯示出來後,view才依附在window上顯示出來。

【self.window make keywindow】//讓uiwindow成為主視窗,但不顯示。

2.獲取uiwindow

(3)view.window獲得某個uiview所在的uiwindow

四、四大物件的關係圖

五、主視窗和次視窗說明

**:

// 程式啟動完畢之後就會呼叫一次

**說明:

再建立乙個視窗(主視窗和次視窗的區別)

區域性變數,需要定義乙個window屬性來儲存變數。

window的屬性定義為strong,就是為了讓其不銷毀。

乙個應用程式只能有乙個主視窗,程式中建立了兩個window,那麼誰是主視窗?後面的視窗能覆蓋前面的視窗。

在ios7裡邊,主視窗和次視窗是沒有區別的

在ios7以前中有區別:哪個是主視窗,後面設定為主視窗會把之前設定的覆蓋掉。(只有主視窗才能響應鍵盤的輸入事件,如果不能輸入內容,可以檢視是否是顯示在主視窗上,不在主視窗上的不能響應。)

六、補充說明

在有storyboard中的建立過程:

注意這個控制器屬性面板上的「初始化控制器屬性」。

在沒有storyboard中的建立過程:

iOS開發UI篇 UIScrollView控制項介紹

ios開發ui篇 uiscrollview控制項介紹 一 知識點簡單介紹 1.uiscrollview控制項是什麼?1 移動裝置的螢幕 大 小是極其有限的,因此直接展 示在 使用者眼前的內容也相當有限 2 當展 示的內容較多,超出 乙個螢幕時,使用者可通過滾動 手勢來檢視螢幕以外的內容 3 普通的u...

iOS開發UI技巧篇 UILable

1 ios7 之後 uilable顯示多行 這個在某些場景下會出問題,沒找到原因 uilabel lable uilabel alloc init lable.text 當您有新中獎訂單,啟動程式時通過動畫提醒您。為避免過於頻繁,高頻彩不會提醒。self.tableview addsubview l...

iOS開發UI篇 CALayer簡介

ios開發ui篇 calayer簡介 一 簡單介紹 在ios中,你能看得見摸得著的東西基本上都是uiview,比如乙個按鈕 乙個文字標籤 乙個文字輸入框 乙個圖示等等,這些都是uiview。其實uiview之所以能顯示在螢幕上,完全是因為它內部的乙個圖層,在建立uiview物件時,uiview內部會...