![iPhone UIKit详解](https://wfqqreader-1252317822.image.myqcloud.com/cover/3/654003/b_654003.jpg)
3.7 UIViewController与相关类间关系概要
3.7.1 UIViewController与UIView/UIWindow的关系
UIViewController中以view属性的形式拥有UIView,此UIView作为UIWindow的subviews追加进来显示在画面中。为反映这种联系,以让各元素间的关系(通过属性)更清楚地呈现在大家面前,特绘制了如图3-33所示的对象关系图。
![](https://epubservercos.yuewen.com/3DD0A4/3591140804529001/epubprivate/OEBPS/Images/Figure-0112-23640.jpg?sign=1739142591-HoTRARYGYutuvUX3UH5VBCbecGarqxD7-0-e19a7451689a95671ddd0292ace2d07f)
图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所示。
![](https://epubservercos.yuewen.com/3DD0A4/3591140804529001/epubprivate/OEBPS/Images/Figure-0112-23656.jpg?sign=1739142591-cMJdw85QVEF5HQviJUyVzFDfbiZAqaBe-0-9a3c6ac4bddea431a806fc77bb426373)
图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所示。
![](https://epubservercos.yuewen.com/3DD0A4/3591140804529001/epubprivate/OEBPS/Images/Figure-0113-23717.jpg?sign=1739142591-S5eHDy3MxMPGGChNxwBcNSHWpVkjqBpS-0-edb04fe747075de245d98bf32d2bbe49)
图3-35 UINavigationController与各画面的关系
此图反映的关系特征如下。
● UINavigationController的viewControllers属性中保存了跳转路径中所有画面的UIViewController。
● 跳转路径中所有画面的UIViewController中,可通过topViewController取得当前画面的UIViewController。
● 对于跳转路径中所有画面的UIViewController来说,可以通过其navigationController属性参照UINavigationController。
● 跳转路径中已经退出的画面与UINavigationController没有任何关系。
● 跳转路径中各画面的parentViewController属性参照的不是上一画面而是UINavigationController。
3.7.4 UIViewController与模态画面的关系
这里将UIViewController与模态画面的关系归纳为如图3-36所示。
![](https://epubservercos.yuewen.com/3DD0A4/3591140804529001/epubprivate/OEBPS/Images/Figure-0114-23739.jpg?sign=1739142591-YErlWvwYmeT0TrIIJff4SPrSUkDxw1oH-0-d6469dd1e45b0b87d3cdef260a7e8ea7)
图3-36 UIViewController与模态画面间的关系
此图反映的关系特征如下。模态画面可通过当前画面UIViewController的modalViewController属性进行参照。
● 就算模态画面被显示,UINavigationController的topViewController也不是指向模态画面,而是仍然指向弹出模态画面的原画面的UIViewController。
● 对于UINavigationController的visibleViewController属性来说,如果模态画面被显示,则指向模态画面。
● 模态画面的parentViewController并非指向模态画面的母画面,而是指向UINavigationController。