三、自定义视图、视图控制器

1.自定义视图

  • 自定义视图:系统标准UI之外,自己组合而出的新的视图。

在实际开发中,我们经常需要自己定义视图,积累自己的代码库。自己封装的视图,能像系统提供的UI控件一样用于多个项目中,这样可以提高我们的开发效率。

自定义视图的步骤:

根据需求的不同,自定义视图继承的类也会不同。一般自定义的视图会继承自UIView。以下是自定义视图的要点:

  1. 创建一个UIView子类
  2. 在类的初始化方法中添加子视图
  3. 类的.h文件提供了一些接口(方法),便于外界操作子视图。

示例1: 自定义label-textField视图

假设我们使用LTView类代表label-textField视图,我们可以创建一个LTView类继承于UIView。将UIView作为一个容器,在LTView的初始化方法中创建并添加label和textField。

将Label和TextField封装到LTView中,在一定程度上简化了我们的代码。在自定义LTView中我们使用了复合设计模式。

复合设计模式:A类中,使用B类(或者更多类)作为自己的成员(实例变量)。

iOS中复合是特别常见的设计模式,iOS新控件往往都是用已有的控件组合成的。

2. 视图控制器

UIViewController : 视图控制器,控制视图显示,响应事件。分担AppDelegate的工作。实现模块独立,提高复用性。

视图控制器的功能:(1)控制视图大小变换、布局视图、响应事件。(2)监测以及处理内存警告。(3)检测以及处理屏幕旋转。(4)检测视图的切换。

自定义视图控制器:

1> 定义UIViewController的子类
2> 创建视图控制器对象,作为window的根视图控制器
3> 在viewDidLoad中使用创建好的对象view

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

UIViewController自带一个空的view,与需求不符合。视图控制器只负责控制视图显示和响应事件。

自定义View

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

2> 重写controller的loadView方法。创建自定义视图对象,并指定为controller的view。

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

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

4. MVC概述

MVC是一个框架级的设计模式。M是Model,主要用于建立数据模型(即数据的结构)。V是View,我们看到的所有控件都是view,view的主要功能是展示数据。C是控制器,主要是控制M和V之间的通信。

5. 检测屏幕旋转

视图控制器本身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写几个方法:
(1)supportedInterfaceOrientations (设置设备支持旋转的方向)

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

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

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

视图处理

视图控制器会自动调整view的大小以适应屏幕的旋转,bounds被修改,触发view的layoutSubviews方法。view重写layoutSubviews方法,根据设备方向重新布局。

[UIApplication shareApplication].statusBarOrientation 方法可以提供设备的当前方向。

6. 处理内存警告

控制器能监测内存警告,以便我们避免内存不够引起的crash。在定义的controller子类中重写didReceiveMemoryWarning方法。释放暂时不使用的资源。(数据对象、图像)

7. 容器视图控制器

常用方法:

self.view显示:viewWillAppear:和viewDidAppear:

self.view消失:viewWillDisappear:和viewDidDisappear:

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

posted @ 2016-05-28 22:38  Coder-LiLe  阅读(269)  评论(0编辑  收藏  举报