當前位置:
首頁 > 最新 > ViewController的層級結構

ViewController的層級結構

GIF

概述

大多數情況下,一個App會有多個ViewController組成,每個ViewController定義著它自己的行為,你它們組合在一起,完成你的App所表達的功能。UIKit期望開發者按照指定的規則使用ViewController。維持ViewController之間的正確關係以保證當將用戶行為交付給正確的ViewController。如果你打破了規則和呈現關係,App的部分行為將不會如你所願。

Root ViewController

rootViewController是ViewController層級結構中的一個節點,每個Window都有一個rootViewController,rootViewController的內容填充這個Window。rootViewController里定義了用戶打開App後看到的最初內容。下圖展示window和rootViewController之間的關係。由於window沒有可被用戶看到的內容,ViewController提供了所有的可是內容。

window和rootViewController之間的關係

rootViewController與UIWindow對象的rootViewController屬性相關聯。如果你使用stroyboard來設置你的ViewController,UIkit會在App啟動的時候自動為該屬性賦值。如果你手寫代碼,一定要為該屬性賦值。

容器視圖控制器

容器類視圖控制器可以讓你構建的複雜頁面,更加易於管理和重用。容器類視圖控制器將一個或多個子視圖控制器的內容與其他自定義的視圖結合在一起,形成最終的用戶界面。比如:UINavigationController對象將子視圖控制器的內容與導航條結合在一起來展示內容。UIKit定義了幾個容器類型的視圖控制器,包括UINavigationController、UISpliteViewController、UIPageViewController。

容器類視圖控制器的視圖總是會填充給定它的空間。容器類視圖控制器經常作為window的rootViewController,如下圖所示,當然,它們也可以以模態(presented modally)的方式呈現或者作為其他容器視圖的子視圖。容器視圖負責放置子視圖的位置。在下圖中,容器視圖將兩個子視圖並排放置。雖然子視圖控制器的顯示是依據容器視圖的,但子視圖控制器對容器視圖卻知之甚少。

容器視圖控制器作為跟視圖控制器

因為容器型控制器管理者它的子視圖控制器,UIKit框架定義了在自定義容器中如何設置它們子視圖控制器的規則。關於如何自定義容器視圖控制,可以參考:Implementing a Container View Controller

展示視圖控制器

展現一個新的ViewController來替換當前的ViewController的內容,通常會隱藏先前的ViewController的內容。presentations 經常使用模態的方式展示新內容,比如:你可以展現一個ViewController來收集用戶的輸入信息。你也可以使用它展示一個App內的普通模塊。

當你present一個ViewController的時候,UIKit框架會在要展示的ViewController和正在展示的ViewController之間建立一個關係(這裡存在一個與這個關係相反的關係。),如下圖所示。這些關係是ViewController的層級結構的一部分,也是在運行時定位其他ViewController的一種方法。

呈現ViewController

當涉及到容器類型的ViewController時,你需要寫一點簡單的代碼讓UIKit框架修改展示鏈。不同的展現方式有不同的呈現在屏幕上的規則。比如:一個全屏的呈現(presentation)總是覆蓋真箇屏幕。當你呈現(present)一個ViewController的時候,UIKit尋找一個ViewController作為合適的上下文來提供展示操作,在許多情況下,UIKit選擇最近的容器類視圖控制器,但它也可能選擇window的根視圖控制器。在某些情況下,你也可以告訴UIKit選擇哪一個ViewController作為呈現的上下文並處理呈現操作。

在下圖中,展示了為什麼容器控制器通常作為呈現操作的上下文,當展示一個全屏呈現時,新的ViewController需要覆蓋整個屏幕。容器控制器來決定是否處理呈現操作,而不是要求子視圖控制器知道它所屬容器的尺寸。在下面的例子中,導航控制器覆蓋了整個屏幕,它來執行ViewController的呈現操作。

容器類視圖控制器呈現ViewController

關於更多的presentations信息,請參考:The Presentation and Transition Process


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 RiverLi 的精彩文章:

TAG:RiverLi |