iPhone UIKit详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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。