UIViewController介绍
·视图控制器是应用程序数据和视图之间的重要桥梁,每个iOS应用程序只显示一个用 户界面,显示的内容是由控制器或一组视图控制器协调管理。所以,视图控制器提供了一 个基本的框架来构建应用程序。
·UIViewController是所有视图控制器的父类
·iOS提供了许多内置的视图控制器类,以支持标准的用户界面部分,比如导航控制器 (UINavigationController),标签栏控制器(UITabBarController),表视图控制器 (UITableViewController)等
视图控制器与视图的关系
·视图控制器是传统的Model-View-Controller(MVC)设计模式中 —— 控制器对象
·视图控制器提供了许多控制器的基本功能,因为它是所有控制器的基类
·对于某些功能,基类提供了解决方案的一部分,其他的自定义的功能由视图控制器的 子类去实现。比如:用户旋转设备,可以由子类去控制是否旋转
·视图控制器负责创建和管理一组视图,它本身就提供了一个视图,称为该控制器的根 视图(view),协调管理数据和视图之间的交互
·每个视图控制器管理和控制一系列的视图
·你永远不会直接把UIView添加到UIWindow上面,而是添加一个 UIViewController。
·UIViewController的创建有两种方式,一种是使用xib的方式来创建
·另外一种是使用代码来创建视图。
·初始化方法
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
UIWindow可以设置根视图控制器,会将视图控制器的视图添加到window上。
RootViewController *rc = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
self.window.rootViewController = rootCtrl;
旧写法
[self.widow addsubview:viewController.view]
类与XIB关联
·如果RootViewController是新建的一个类,RootViewController.xib也是单 独新建的,如何让他们关联起来?
·选中RootViewController.xib-->File’s Owner-->Custom Class(改成 RootViewController)
代码方式创建
- (void) loadView
{
//创建每个控制器的根视图
UIView *rootView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
self.view = rootView;
self.view.backgroundColor = [UIColor redColor];
[rootView release];
//初始化其他视图...
}
UIViewController生命周期
加载过程
·首先去访问view属性
·如果存在view,则直接加载。相反,如果不存在,则UIViewController调用 loadView方法
·loadView方法执行如下操作:
·如果你覆盖了该方法,则必须创建view给UIViewController的view属性 如果你没有覆盖该方法,UIViewController会调用父类的方法 通过viewDidLoad方法来执行一些其他任务
理解各个方法执行顺序
- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- (void) loadView
- (void) viewDidLoad // 解释 [super viewDidLoad]
- (void) viewWillAppear:(BOOL)animated
- (void) viewDidAppear:(BOOL)animated ·- (void) viewWillDisappear:(BOOL)animated
- (void) viewDidDisappear:(BOOL)animated
视图出现add
视图消失remove
视图卸载
视图控制器的视图内存管理
视图控制器的响应链
模态视图
·模态视图不是专门的某个类,而是通过视图控制器的presentModalViewController: 方法弹出的视图我们都称为模态视图
·模态视图出现的场景一般是临时弹出的窗口,譬如:登陆窗口
·模态视图弹出时通过modalTransitionStyle属性设置不同的动画效果
·调用 dismissModalViewControllerAnimated: 方法关闭窗口
支持多个方向旋转
·iOS设备中的加速计可以确定设备的当前方向。默认情况,一个应用程序支持纵向和 横向。当设备方向改变的时候,系统会发送UIDeviceOrientationDidChangeNotification通 知,默认情况下UIKit框架监听这个通知,并自定更新这个方向。