1.自定义视图
- 自定义视图:系统标准UI之外,自己组合而出的新的视图。
在实际开发中,我们经常需要自己定义视图,积累自己的代码库。自己封装的视图,能像系统提供的UI控件一样用于多个项目中,这样可以提高我们的开发效率。
自定义视图的步骤:
根据需求的不同,自定义视图继承的类也会不同。一般自定义的视图会继承自UIView。以下是自定义视图的要点:
- 创建一个UIView子类
- 在类的初始化方法中添加子视图
- 类的.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方法。