Open
Description
UIViewController
iPhone用户看到的App页面都是UIViewController
。UIViewController
是管理UIKit
应用程序视图层次结构。
在MVC设计模式扮演控制层的角色。
UIViewController
作为Controller主要职责有:
- 视图(
UIView
)管理 - 处理用户交互
视图管理
每个ViewController管理一个视图层级(View Hierarchy)。
根视图(Root View)
根视图是管理视图层级的一个容器。
指定视图(View)
有三种方式指定视图:
- storyboard
- xib (nib)文件
- 纯代码
storyboard和xib文件方式属于Interface Builder。
View生命周期

创建View的过程

(摘自iOS开发-UIViewController使用详解)
生命周期

1. 创建阶段
init
initWithCoder
:Storyboard方式指定视图会调用这个initWithNibName
2. 加载
loadView
用于创建view
属性viewDidLoad
viewDidUnload
iOS6 已废弃
注意:
- 只创建ViewController实例对象并不会触发回调,只有当ViewController实例对象首次被添加到视图里才会触发回调。
3. 展示阶段

viewWillAppear
viewWillLayoutSubviews
viewDidLayoutSubviews
viewDidAppear
viewWillDisappear
viewDidDisappear
创建UIViewController
基于三种指定视图的方式,创建UIViewController
对应有三种方式:
- storyboard
// 先加载storyboard文件
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"文件名" bundle:nil];
// 接着初始化storyboard中的控制器
// 初始化“初始控制器”(storyboard里箭头所指的控制器)
ViewController *vc = [storyboard instantiateInitialViewController];
// 通过一个标识初始化对应的控制器
// ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"标识"];
- xib (nib)文件
UIViewController *vc = [UIViewController alloc] initWithNibName:@"文件名" bundle:(nil默认mainbundle)];
- 直接通过代码
UIViewController *vc = [UIViewController alloc] init];
init
方法内部也会调用initWithNibName
。