一.自定义视图(label-textField组合视图)

采用:复合设计模式

ios 多视图结构 ios视图控制器的功能_自定义视图

 

自定义视图优点:

1.iOS提供了很多UI组件,借助它们我们可以实现不同的功能。尽管如此,实际开发中,我们需要自定义视图。积累自己的代码库,方便开发。自己封装的视图,能像系统UI控件一样,用于别的项目中,能大大降低开发成本,提高开发速率。

2.高质量代码的特点:可复用,可移植,精炼等(高内聚,低耦合)

AppDelegate.m中:

ios 多视图结构 ios视图控制器的功能_视图控制器_02

LTView.h中:

ios 多视图结构 ios视图控制器的功能_ios 多视图结构_03

LTView.m中:

ios 多视图结构 ios视图控制器的功能_视图控制器_04

RootView.m中:

ios 多视图结构 ios视图控制器的功能_ios 多视图结构_05

二.视图控制器

1.视图控制器是应用程序数据和视图之间的重要桥梁,每个iOS应用程序只显示一个用户界面,显示的内容是由控制器或一组视图控制器协调管理。所以,视图控制器提供了一个基本的框架来构建应用程序。

2.UIViewController是所有视图控制器的父类

3.iOS提供了许多内置的视图控制器,以支持标准的用户界面部分,比如导航控制器(UINavigationController),标签控制器(UITabBarController),表视图控制器(UITableViewController)等。

功能:

1.控制视图大小变化,布局视图,响应事件

2.检测以及处理内存警告

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

4.检测视图的切换

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

三.视图控制器指定视图

自定义视图

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

2.重写controller的loadview方法。创建自定义视图对象,并制定为controller的view(注意:loadView方法在控制器的view为nil的时候别调用,用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法,用于使用写代码来实现控件)

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

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

ios 多视图结构 ios视图控制器的功能_控件_06

四.MVC

1.UIViewController是MVC设计模式的核心

2.MVC是一个框架级的设计模式

3.M是model,主要用于建立数据模型(数据的结构)

4.V是View,我们能看到的所有控件都是view,view的主要功能是显示数据

5.C是controller,主要是控制M和V的通信

ios 多视图结构 ios视图控制器的功能_视图控制器_07

 

 

五.屏幕旋转

方向:

ios 多视图结构 ios视图控制器的功能_自定义视图_08

 

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

1.supportedInterfaceOrientation(设置设备支持旋转的方向,如果不添加,视图控制器将无法检测屏幕的旋转)

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

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

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

视图的处理:

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

2.view重写layoutSubviews方法,根据设备方向,重新布局

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

六.内存警告

内存警告来源:手机内存80M,程序运行过程中内存接近80M时程序会为每一个视图控制器发送内存警告消息。

如何处理:

1.控制器能检测内存警告,以便我们避免内存不够引起的crash

2.在定义的controller子类中重写didReceiveMemoryWarning方法

3.释放暂时不使用的资源

- (void) didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
//根视图已经加载过,根视图未显示
if([self isViewLoaded] == YES && self.view.window == nil) {
//将根视图销毁,目的是再次进入时能够重新加载调用viewDidLoad函数
self.view = nil;
}
}

ios 多视图结构 ios视图控制器的功能_视图控制器_09