UIViewController概念
视图控制器是应用程序数据和视图之间的重要桥梁,每个iOS应用程序只显示一个用户界面,显示的内容是由控制器或一组视图控制器协调管理。所以,视图控制器提供了一个基本的框架来构建应用程序。
UIViewController是所有视图控制器的父类
- iOS提供了许多内置的视图控制器类,以支持标准的用户界面部分,比如导航控制器
(UINavigationController),标签栏控制器(UITabBarController),表视图控制器(UITableViewController)等
视图控制器与视图的关系
视图控制器是传统的Model-View-Controller(MVC)设计模式中 —— 控制器对象
视图控制器提供了许多控制器的基本功能,因为它是所有控制器的基类
视图控制器负责创建和管理一组视图,它本身就提供了一个视图,称为该控制器的根视图(view),协调管理数据和视图之间的交互
Screens, Windows、 Views创建可视化界面
Screens, Windows、 Views的层次关系
- UIScreen对象是连接物理屏幕的标示
- UIWindow为UIScreen对象提供了一个画布
- 一组UIView对象就可以显示内容,当window对象相应他们的请求的时候,就开始画显示的内容
UIViewController的创建
- UIViewController的创建有两种方式,一种是使用xib的方式来创建
RootViewController是新建的一个类,新建RootViewController.xib
选中RootViewController.xib–>Custom Class(改成RootViewController)
- 另外一种是使用代码来创建视图
//创建每个控制器的根视图
UIView *rootView =[[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];
self.view = rootView;
self.view.backgroundColor = [UIColor redColor];
UIViewController生命周期
视图的加载过程
- 首先去访问view属性
如果存在view,则直接加载。相反,如果不存在,则UIViewController调用loadView方法
loadView方法执行如下操作
如果你覆盖了该方法,则必须创建view给UIViewController的view属性 如果你没有覆盖该方法,UIViewController会调用父类的方法,通过viewDidLoad方法来执行一些其他任务
UIViewController加载视图方法的执行顺序
1、加载nib时会调用
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
2、没有正在使用nib视图页面,子类将会创建自己的自定义视图层
-(void)loadView
3、视图被加载后调用
-(void)viewDidLoad
4、视图即将出现的时候调用
-(void)viewWillAppear:(BOOL)animated
5、视图出现后的时候调用
-(void)viewDidAppear:(BOOL)animated
6、视图即将消失的时候调用
-(void)viewWillDisappear:(BOOL)animated
7、视图消失后的时候调用
-(void)viewDidDisappear:(BOOL)animated
视图的添加过程
视图的移除过程
视图的卸载过程
视图控制器的视图内存管理
视图控制器的事件传递流程
当前触发的事件——>当视图控制器的根视图——>视图控制器——>窗口——
UIApplication对象——>不处理(忽略)
模态视图
- 模态视图不是专门的某个类,而是通过视图控制器的presentModalViewController:方法弹出的视图我们都称为模态视图
- 模态视图出现的场景一般是临时弹出的窗口
- 模态视图弹出时通过modalTransitionStyle属性设置不同的动画效果
- 调用 dismissModalViewControllerAnimated: 方法关闭窗口