- iPhone UIKit詳解
- 王志剛 王中元 朱蕾編著
- 779字
- 2019-01-01 07:04:28
3.7 UIViewController與相關類間關系概要
3.7.1 UIViewController與UIView/UIWindow的關系
UIViewController中以view屬性的形式擁有UIView,此UIView作為UIWindow的subviews追加進來顯示在畫面中。為反映這種聯系,以讓各元素間的關系(通過屬性)更清楚地呈現在大家面前,特繪制了如圖3-33所示的對象關系圖。

圖3-33 UIViewController類與UIView/UIWindow間的關系
圖中所有用線關聯起來的對象之間均有屬性關系。其中用帶四方形箭頭的線連接的兩個對象之間,四方形箭頭指向的一方擁有另一方。例如UIViewController與中間的UIView之間,UIViewController以view屬性的形式擁有UIView對象,屬性名稱顯示在靠近UIView一邊。此圖中反映的關系特征如下。
- UIViewController擁有一個UIView(view屬性)。
- UIViewController的view中可以追加任意數目的UIView以創建畫面。
- UIView中可以包含多個UIView(subviews)。
- UIView可通過superview屬性參照父UIView。
- 如果是UIWindow的子元素(subviews),則可通過Window屬性參照UIWindow。
3.7.2 UITabBarController與各畫面的關系
接著我們將UITabBarController與各畫面的關系歸納為如圖3-34所示。

圖3-34 UITabBarController與各畫面的關系
此圖反映的關系特征如下。
● UITabBarController通過viewControllers屬性管理多個UIViewController。
● viewControllers的UIViewController中,可通過selectedViewController屬性參照當前畫面的UIViewController。
● 對于viewControllers中的UIViewController來說,可通過tabBarController屬性參照UITabBarController。
● 對于viewControllers中的UIViewController來說,也可通過parentViewController屬性參照UITabBarController。
3.7.3 UINavigationController與各畫面的關系
這里將UINavigationController與各畫面的關系歸納為如圖3-35所示。

圖3-35 UINavigationController與各畫面的關系
此圖反映的關系特征如下。
● UINavigationController的viewControllers屬性中保存了跳轉路徑中所有畫面的UIViewController。
● 跳轉路徑中所有畫面的UIViewController中,可通過topViewController取得當前畫面的UIViewController。
● 對于跳轉路徑中所有畫面的UIViewController來說,可以通過其navigationController屬性參照UINavigationController。
● 跳轉路徑中已經退出的畫面與UINavigationController沒有任何關系。
● 跳轉路徑中各畫面的parentViewController屬性參照的不是上一畫面而是UINavigationController。
3.7.4 UIViewController與模態畫面的關系
這里將UIViewController與模態畫面的關系歸納為如圖3-36所示。

圖3-36 UIViewController與模態畫面間的關系
此圖反映的關系特征如下。模態畫面可通過當前畫面UIViewController的modalViewController屬性進行參照。
● 就算模態畫面被顯示,UINavigationController的topViewController也不是指向模態畫面,而是仍然指向彈出模態畫面的原畫面的UIViewController。
● 對于UINavigationController的visibleViewController屬性來說,如果模態畫面被顯示,則指向模態畫面。
● 模態畫面的parentViewController并非指向模態畫面的母畫面,而是指向UINavigationController。