UIViewController:视图控制器。
控制视图显⽰,响应事件。
分担AppDelegate的⼯作。
实现模块独⽴,提⾼复⽤性。
视图控制器的功能:
控制视图⼤小变换、布局视图、响应事件。
检测以及处理内存警告。
检测以及处理屏幕旋转。
检测视图的切换。
MVC概述:
UIViewController是MVC设计模式的核⼼。
MVC是⼀个框架级的设计模式。
M是Model,主要⽤用于建⽴数据模型(即数据的结构)
V是View,我们能看到的所有控件都是view,view主要的功能是展示数据。
C是控制器,主要是控制M和V的通信。
使用视图控制器:
定义UIViewController的⼦类创建视图控制器对象,作为window的根视图控制器在viewDidLoad中使⽤默认创建好的视图对象view
视图控制器指定自定义viewUIViewController⾃带⼀个空的view,与需求不符合。视图控制器只负责控制视图显示,响应事件。
如何设置:
//⾃定义视图类继承UIView。在初始化⽅法中添加子视图控件。
//重写controller的loadView⽅方法。创建⾃定义视图对象,并指定为controller的view。
//将⼦视图控件对象设置为自定义视图类的属性,在viewDidLoad⽅法中进行设置:添加action、设置delegate等等。
//在controller中添加按钮点击事件实现和代理方法的实现。
检测屏幕旋转:
视图控制器本⾝能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写⼏个⽅法:
supportedInterfaceOrientations(设置设备⽀持旋转的⽅向)
视图处理:
注意视图控制器会⾃动调整view的⼤小以适应屏幕旋转,bounds被修改,触发view的layoutSubviews⽅法。
view重写layoutSubviews方法,根据设备⽅向,重新布局。
[UIApplication shareApplication].statusBarOrientation提供设备当前⽅向。
处理内存警告:
控制器能监测内存警告,以便我们避免内存不够引起的crash。在定义的controller⼦类中重写didReceiveMemoryWarning⽅法。释放暂时不使⽤的资源。(数据对象、图像)
RootViewController.m文件的内容
//加载视图
- (void)loadView
{
LoginView *login=[[LoginView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
//必须告诉self.view管理哪个视图
self.view=login;
[login release];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor=[UIColor greenColor];
ThirdViewController *thirdVC=[[ThirdViewController alloc]init];
[self.view addSubview:thirdVC.view];
[self addChildViewController:thirdVC];
[thirdVC release];
}
//设置模拟器支持的方向,可以使用按位或|来返回支持多个方向。
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortrait;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
NSLog(@"内存警告");
//当视图已经加载到内存,并没有显示在window上时,将视图置空
if ([self isViewLoaded]&&self.view.window==nil) {
self.view=nil;
}
// Dispose of any resources that can be recreated.
}
AppDelegate.m文件
指定根视图
RootViewController *rootVC=[[RootViewController alloc]init];
self.window.rootViewController=rootVC;
[rootVC release];
/*
UIViewController的生命周期
1.init
2.loadView
3.viewDidLoad
4.viewWillAppear
5.viewDidAppear
6.viewWillDisappear
7.viewDiaDisappear
8.dealloc
*/
AppDelegate