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方法,创建自定义视图对象,并指定为controller的view,即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方法