1.视图控制器功能概述

  • 分担AppDelegate的工作

  • 实现模块独立,提高复用性

  • 控制视图大小变换、布局视图、响应事件

  • 检测视图的切换

  • 检测以及处理屏幕旋转.

2.UIViewController创建及初始化工作


2.1通常不使用UIViewController类创建对象,而使用其子类创建对象

(1)定义UIViewController的子类创

(2)建视图控制器对象,作为window的根视图控制器

(3)在viewDidLoad中使用默认创建好的视图对象view

示例:

RootViewController.h

@interface RootViewController : UIViewController


AppDelegate.h

#import "RootViewController.h"


RootViewController *rootVC = [[RootViewControlleralloc] init];

self.window.rootViewController = rootVC;

[rootVC release];


2.2 UIViewController的重要属性及重要方法

//父视图控制器,类似与superView

@property(nonatomic,readonly) UIViewController *parentViewController;

//子视图控制器,为数组类型,类似于subViews

@property(nonatomic,readonly) NSArray *childViewControllers

//添加一个子视图控制器到父视图上

- (void)addChildViewController:(UIViewController *)childController

//移除一个子视图(从父视图上)

- (void) removeFromParentViewController

3.视图控制器自定义视图view

为何要自定义视图:

UIViewController自带一个空的view,与需求不符合.

视图控制器只负责控制视图显示,响应事件.


3.1设置方法

 自定义视图类继承UIView,在初始化方法中添加子视图控件。

 重写controller的- (void)loadView方法,创建自定义视图对象,并指定为controllerview,即self.view = myView;

 将子视图控件对象设置为自定义视图类的属性,在viewDidLoad方法中进行设置:添加action、设置delegate等等。

 在controller中添加按钮点击事件实现和代理方法的实现。

示例:

- (void)loadView

{

LoginView *loginview = [[LoginViewalloc]initWithFrame:CGRectMake(0, 50, 300, 480)];

self.view = loginview;  //重写- (void)loadView的根本目的是为了这句

}


4.视图控制之屏幕旋转

4.1视图控制器本身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写几个方法:

(1) supportedInterfaceOrientations(设置设备支持旋转的方向)

(2)willRotateToInterfaceOrientation:duration:(暂停音乐、关闭视图交互等)

(3)willAnimateRotationToInterfaceOrientation:duration:(添加自定义动画等)

(4)didRotateFromInterfaceOrientation:(播放音乐、打开视图交互等)。


4.2视图处理

注意视图控制器会自动调整view的大小以适应屏幕旋转,bounds被修改,触发view的layoutSubview方法

view重写layoutSubViews方法,根据设备方向,重新布局

[UIApplication shareApplication].statusBarOrientation提供设备 当前方向


5.容器视图控制器

常用方法:

self.view显:viewWillAppear: viewDidAppear:

self.view消失:viewWillDisappear: 和viewDidDisappear:

当self.view添加到父视图上时,执行appear方法;当self.view从父视图上移除时,执行disappear方法