本讲内容
一、⾃自定义视图
二、视图控制器指定自定义View
三、检测屏幕旋转
四、处理内存警告
五、容器视图控制器
一、⾃自定义label-textField视图
优化登录界⾯面
实现一个功能,不是难事。写出高质量的代码却不是任何程序员都能
做到的事。
高质量代码特点:可复用,可移植,精炼等。
如何优化登录界⾯(代码)?
界面特点
登录界⾯面有个特点:每个UITextField都有⼀一个UILabel修饰。
系统是否有⼀一个视图类,左边是UILabel,右边是UITextField
⾃定义视图⾃自定义视图:系统标准UI之外,⾃自⼰己组合⽽而出的新的视图。
iOS提供了很多UI组件,借助它们,我们可以做各种程序。
尽管如此,实际开发中,我们还需⾃自定义视图。积累⾃自⼰己的代码库。⽅方便开发。⾃自⼰己封装的视图,能像系统UI控件⼀一样,⽤用于别的项⺫⽬目中,能⼤大⼤大降低开发成本,提⾼高开发效率。
自定义视图步骤根据需求的不同,⾃自定义视图继承的类也有所不同。⼀一般⾃自定义的
视图会继承于UIView。以下是⾃自定义视图的要点:1、创建⼀一个UIView⼦子类
2、在类的初始化⽅方法中添加⼦子视图3、类的.h⽂文件提供⼀一些接⼝口(⽅方法),便于外界操作⼦子视图。
假设我们使⽤用LTView类代表label-textfield视图。
我们创建⼀一个LTView类继承于UIView。
我们将LTView作为⼀一个容器,在LTView的初始化⽅方法中创建并添加label和textField。
此时的LTView就变成了⼀一个具有label和textField的视图了。
label-textField视图假设我们使⽤用LTView类代表label-textfield视图。
我们创建⼀一个LTView类继承于UIView。label textField
我们将LTView作为⼀一个容器,在LTView的初始化⽅方法中创建并添加label和textField。
此时的LTView就变成了⼀一个具有label和textField的视图了。
LTView控制
把Label和Textfield封装到LTView中,在⼀一定程度上简化了我们的代码。
往往我们需要对LTView中的Label或者Textfield进⾏行⼀一定的控制,⽐比如:设置Label的text,获取Textfield的text,给Textfield指定delegate,设置textColor等。
为了方便外界操作Label和Textfield,因此我们要为外界提供⼀一些⽅方法。
LTView控制
把Label和Textfield封装到LTView中,在⼀一定程度上简化了我们的代码。
往往我们需要对LTView中的Label或者Textfield进⾏行⼀一定的控制,⽐比如:设置Label的text,获取Textfield的text,给Textfield指定delegate,设置textColor等。
为了⽅方便外界操作Label和Textfield,因此我们要为外界提供⼀一些⽅方
法。
代码演⽰示
⼩节
自定义LTView使⽤用了⼀一种设计模式:复合设计模式。
复合设计模式:A类中,使⽤用B类(或者更多类)作为⾃自⼰己的成员(实例变量)。
iOS中复合是特别常⻅见的设计模式。iOS新控件往往都是⽤用已有控件组合⽽而成的。
⼆、视图控制器
视图控制器概述
UIViewController:视图控制器。控制视图显⽰示,响应事件。分担AppDelegate的⼯工作。实现模块独⽴立,提⾼高复⽤用性。
视图控制器功能
控制视图⼤大⼩小变换、布局视图、响应事件。
检测以及处理内存警告。
检测以及处理屏幕旋转。
检测视图的切换。
MVC概述
UIViewController是MVC设计模式的核⼼心。MVC是⼀一个框架级的设计模式。M是Model,主要⽤用于建⽴立数据模型(即数据的结构)V是View,我们能看到的所有控件都是view,view主要的功能是展⽰示数据。C是控制器,主要是控制M和V的通信。
iOS中的MVC
系统的可维护性、可扩展性增强
使⽤用视图控制器
定义UIViewController的⼦子类创建视图控制器对象,作为window的根视图控制器在viewDidLoad中使⽤用默认创建好的视图对象view
练习2定义视图控制器类,创建视图控制器对象,作为window的根视图控
制器。在viewDidLoad中修改view的颜⾊色。
UIViewController⾃自带⼀一个空的view,与需求不符合。视图控制器只负责控制视图显⽰示,响应事件。
如何设置⾃自定义视图类继承UIView。在初始化⽅方法中添加⼦子视图控件。
重写controller的loadView⽅方法。创建⾃自定义视图对象,并指定为controller的view。
将⼦子视图控件对象设置为⾃自定义视图类的属性,在viewDidLoad⽅方法中进⾏行设置:添加action、设置delegate等等。
在controller中添加按钮点击事件实现和代理⽅方法的实现。
四、检测屏幕旋转
检测屏幕旋转
视图控制器本⾝身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写⼏几个
⽅方法:
1. supportedInterfaceOrientations(设置设备⽀支持旋转的⽅方向)
2. willRotateToInterfaceOrientation:duration:(暂停⾳音乐、关闭视图交互等)
3. willAnimateRotationToInterfaceOrientation:duration:(添加⾃自定义动画等)
4. didRotateFromInterfaceOrientation:(播放⾳音乐、打开视图交互等)。
视图处理注意视图控制器会⾃自动调整view的⼤大⼩小以适应屏幕旋转,bounds
被修改,触发view的layoutSubviews⽅方法。
view重写layoutSubviews⽅方法,根据设备⽅方向,重新布局。
[UIApplication shareApplication].statusBarOrientation提供设备当前⽅方向。
练习4修改LoginView上视图的布局。
重写view的layoutSubviews⽅方法。实现横屏时,三个控件显⽰示在同⼀一⾏行。
横竖屏切换时,回收已经出现的键盘。
五、处理内存警告
处理内存警告
控制器能监测内存警告,以便我们避免内存不够引起的crash。在定义的controller⼦子类中重写didReceiveMemoryWarning⽅方法。释放暂时不使⽤用的资源。(数据对象、图像)
六、容器视图控制器
常⽤用⽅方法
self.view显⽰示:viewWillAppear: 和 viewDidAppear:
self.view消失:viewWillDisappear: 和 viewDidDisappear:
当self.view添加到⽗父视图上时,执⾏行appear⽅方法: 当self.view从⽗父视图上移除时,执⾏行disappear⽅方法。
演⽰示执⾏行顺序
定义FirstViewController、SecondViewController类,first作为window的根视图控制器。
将SecondViewController的view添加到FirstViewController的view上。将SecondViewController的view移除。查看SecondViewController中4个⽅方法的执⾏行顺序。
iOS提供了很多标准组件,标准组件完成我们的需要,但是适当的封装,组合⼀一个新的控件⽆无疑能给我们带来效率上的提⾼高。学会⾃自
定义控件是你成为⾼高⼿手的关键⼀一步。视图控制器是MVC中的C,⽤用于处理视图触发的事件。处理旋转和内存警告
课程预告事件UIEvent、UIResponder、响应者链