UIViewController介绍

·视图控制器是应用程序数据和视图之间的重要桥梁,每个iOS应用程序只显示一个用 户界面,显示的内容是由控制器或一组视图控制器协调管理。所以,视图控制器提供了一 个基本的框架来构建应用程序。
·UIViewController是所有视图控制器的父类
·iOS提供了许多内置的视图控制器类,以支持标准的用户界面部分,比如导航控制器 (UINavigationController),标签栏控制器(UITabBarController),表视图控制器 (UITableViewController)等

ios 获取视图所在控制器 ios视图控制器的功能_视图控制器



视图控制器与视图的关系

·视图控制器是传统的Model-View-Controller(MVC)设计模式中 —— 控制器对象
·视图控制器提供了许多控制器的基本功能,因为它是所有控制器的基类
·对于某些功能,基类提供了解决方案的一部分,其他的自定义的功能由视图控制器的 子类去实现。比如:用户旋转设备,可以由子类去控制是否旋转
·视图控制器负责创建和管理一组视图,它本身就提供了一个视图,称为该控制器的根 视图(view),协调管理数据和视图之间的交互

ios 获取视图所在控制器 ios视图控制器的功能_模态视图_02


ios 获取视图所在控制器 ios视图控制器的功能_uiviewcontroller_03



·每个视图控制器管理和控制一系列的视图
·你永远不会直接把UIView添加到UIWindow上面,而是添加一个 UIViewController。


ios 获取视图所在控制器 ios视图控制器的功能_ios 获取视图所在控制器_04

·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生命周期


ios 获取视图所在控制器 ios视图控制器的功能_uiview_05


加载过程

·首先去访问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


ios 获取视图所在控制器 ios视图控制器的功能_uiviewcontroller_06

视图消失remove


ios 获取视图所在控制器 ios视图控制器的功能_ios 获取视图所在控制器_07


视图卸载

ios 获取视图所在控制器 ios视图控制器的功能_ios 获取视图所在控制器_08


视图控制器的视图内存管理


ios 获取视图所在控制器 ios视图控制器的功能_模态视图_09

视图控制器的响应链


ios 获取视图所在控制器 ios视图控制器的功能_uiview_10

模态视图

·模态视图不是专门的某个类,而是通过视图控制器的presentModalViewController: 方法弹出的视图我们都称为模态视图
·模态视图出现的场景一般是临时弹出的窗口,譬如:登陆窗口 

·模态视图弹出时通过modalTransitionStyle属性设置不同的动画效果 

·调用 dismissModalViewControllerAnimated: 方法关闭窗口


支持多个方向旋转

·iOS设备中的加速计可以确定设备的当前方向。默认情况,一个应用程序支持纵向和 横向。当设备方向改变的时候,系统会发送UIDeviceOrientationDidChangeNotification通 知,默认情况下UIKit框架监听这个通知,并自定更新这个方向。


ios 获取视图所在控制器 ios视图控制器的功能_uiview_11