Skip to content

UIViewController #279

Open
Open
@yaofly2012

Description

@yaofly2012

UIViewController

iPhone用户看到的App页面都是UIViewControllerUIViewController是管理UIKit应用程序视图层次结构。
MVC设计模式扮演控制层的角色。
image

UIViewController作为Controller主要职责有:

  1. 视图(UIView)管理
  2. 处理用户交互

视图管理

每个ViewController管理一个视图层级(View Hierarchy)

根视图(Root View)

根视图是管理视图层级的一个容器。

指定视图(View)

有三种方式指定视图:

  1. storyboard
  2. xib (nib)文件
  3. 纯代码

storyboard和xib文件方式属于Interface Builder

View生命周期

image

创建View的过程

image

(摘自iOS开发-UIViewController使用详解

生命周期

image

摘自UIViewController Lifecycle

1. 创建阶段

  • init
  • initWithCoder:Storyboard方式指定视图会调用这个
  • initWithNibName

2. 加载

  • loadView 用于创建view属性
  • viewDidLoad
  • viewDidUnload iOS6 已废弃

注意:

  1. 只创建ViewController实例对象并不会触发回调,只有当ViewController实例对象首次被添加到视图里才会触发回调。

3. 展示阶段

image
  • viewWillAppear
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear
  • viewWillDisappear
  • viewDidDisappear

创建UIViewController

基于三种指定视图的方式,创建UIViewController对应有三种方式:

  1. storyboard
// 先加载storyboard文件
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"文件名" bundle:nil];

// 接着初始化storyboard中的控制器
// 初始化“初始控制器”(storyboard里箭头所指的控制器)
ViewController *vc = [storyboard instantiateInitialViewController];

// 通过一个标识初始化对应的控制器
// ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"标识"];
  1. xib (nib)文件
UIViewController *vc = [UIViewController alloc] initWithNibName:@"文件名" bundle:(nil默认mainbundle)];
  1. 直接通过代码
UIViewController *vc = [UIViewController alloc] init];

init方法内部也会调用initWithNibName

参考

  1. UIViewController使用详解
  2. iOS开发-UIViewController使用详解
  3. Understanding the UIViewController Lifecycle in iOS
  4. UIViewController Lifecycle - 分类
  5. UIViewController 生命周期-执行顺序
  6. 深入讲解iOS开发中的UIViewController

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions