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內部會...