ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁。且应用程序至少有一个view controller。每一个view controller对象都负责和管理一个view对象,称此对象为root view,其组织和管理以root view为根的视图层次结构。 app
图 11 布局
能够将view controller分为两种类型: spa
1) Content:用于管理视图中的分散view控件,这些分散view控件是app中的主要实体。 3d
2) Container:做为一种容器,用于存放和管理其它view controller,从而实现导航和表示。 对象
1 Root View Controller blog
Root view controller(简写为RVC)是全部 view controller的支柱,而且window使用RVC来填充其内容视图,即RVC做为window的子视图,app将全部可视化组件都放在了RVC之中,或者是RVC子视图中,如图 12所示。 it
图 12 The root view controller io
在UIWindow对象中有一个rootViewController属性,其描述root VC对象。若是经过storyboards配置VC,那么UIKit会自动设置UIWindow的rootViewController属性;若经过程序建立window,那么须要手动设置window的rootViewController属性。 容器
2 Container View Controllers 可视化
Container view controllers(简写为CVC)能够将离散的视图或组件装配成复杂的app,从而可以复用这些组件或视图。UIKit定义了一些CVC容器,有UINavigationController、 UISplitViewController和UIPageViewController。
CVC负责管理子view controller的空间布局和位置,而且常常做为Root view controller,若图 13所示。固然CVC能够做为任何 view controller的父容器,包括其它的CVC。
图 13 A container acting as the root view controller
3 Presented View Controllers
Presented View Controllers(简写为PVC)常常用于替换当前显示的view controller,即将PVC做为新显示的内容。当present一个新的view controller做为显示的内容,那么UIKit将会为presenting view controller 和presented view controller之间建立一种关系,如图 14所示。
图 14 Presented view controllers
当present一个新的view controller时,UIKit会寻找一个能提供合适上下文的Container view controllers,大多数状况下是选择离最近的Container view controllers;有时须要用户手动指定Container view controllers做为此次present提供的上下文。
如图 15所示,描述了一个涉及Container view controllers的present操做,当屏幕显示黄色了是view时,present了绿色的视图。这时不是将黄色view所关联的controller做为presenting view controller,而是将navigation controller做为presenting view controller。
图 15 A container and a presented view controller