第三讲:⾃自定义视图、视图控制器


本讲内容

一、⾃自定义视图

二、视图控制器指定自定义View

三、检测屏幕旋转

四、处理内存警告
五、容器视图控制器


一、⾃自定义label-textField视图

优化登录界⾯面

 实现一个功能,不是难事。写出高质量的代码却不是任何程序员都能
做到的事。
 高质量代码特点:可复用,可移植,精炼等。
 如何优化登录界⾯(代码)?

界面特点

登录界⾯面有个特点:每个UITextField都有⼀一个UILabel修饰。
系统是否有⼀一个视图类,左边是UILabel,右边是UITextField


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

iOS提供了很多UI组件,借助它们,我们可以做各种程序。

尽管如此,实际开发中,我们还需⾃自定义视图。积累⾃自⼰己的代码库。⽅方便开发。⾃自⼰己封装的视图,能像系统UI控件⼀一样,⽤用于别的项⺫⽬目中,能⼤大⼤大降低开发成本,提⾼高开发效率。


自定义视图步骤根据需求的不同,⾃自定义视图继承的类也有所不同。⼀一般⾃自定义的

视图会继承于UIView。以下是⾃自定义视图的要点:1、创建⼀一个UIView⼦子类
2、在类的初始化⽅方法中添加⼦子视图3、类的.h⽂文件提供⼀一些接⼝口(⽅方法),便于外界操作⼦子视图。


label-textField视图

假设我们使⽤用LTView类代表label-textfield视图。

我们创建⼀一个LTView类继承于UIView

我们将LTView作为⼀一个容器,在LTView的初始化⽅方法中创建并添加labeltextField

此时的LTView就变成了⼀一个具有labeltextField的视图了。


label-textField视图假设我们使⽤用LTView类代表label-textfield视图。

我们创建⼀一个LTView类继承于UIViewlabel textField

我们将LTView作为⼀一个容器,在LTView的初始化⽅方法中创建并添加labeltextField

此时的LTView就变成了⼀一个具有labeltextField的视图了。


LTView控制

LabelTextfield封装到LTView中,在⼀一定程度上简化了我们的代码。

往往我们需要对LTView中的Label或者Textfield进⾏行⼀一定的控制,⽐比如:设置Labeltext,获取Textfieldtext,给Textfield指定delegate,设置textColor等。

为了方便外界操作LabelTextfield,因此我们要为外界提供⼀一些⽅方法。


LTView控制

LabelTextfield封装到LTView中,在⼀一定程度上简化了我们的代码。

往往我们需要对LTView中的Label或者Textfield进⾏行⼀一定的控制,⽐比如:设置Labeltext,获取Textfieldtext,给Textfield指定delegate,设置textColor等。

为了⽅方便外界操作LabelTextfield,因此我们要为外界提供⼀一些⽅方

法。

代码演⽰示

⼩节

自定义LTView使⽤用了⼀一种设计模式:复合设计模式。

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

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


⼆、视图控制器

视图控制器概述

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

视图控制器功能

控制视图⼤大⼩小变换、布局视图、响应事件。
检测以及处理内存警告。
检测以及处理屏幕旋转。
检测视图的切换。

MVC概述

UIViewControllerMVC设计模式的核⼼心。MVC是⼀一个框架级的设计模式。MModel,主要⽤用于建⽴立数据模型(即数据的结构)VView,我们能看到的所有控件都是view,view主要的功能是展⽰示数据。C是控制器,主要是控制MV的通信。

iOS中的MVC


系统的可维护性、可扩展性增强

使⽤用视图控制器

定义UIViewController的⼦子类创建视图控制器对象,作为window的根视图控制器在viewDidLoad中使⽤用默认创建好的视图对象view



练习2定义视图控制器类,创建视图控制器对象,作为window的根视图控

制器。在viewDidLoad中修改view的颜⾊色。


三、视图控制器指定⾃自定义view
为什么使⽤用⾃自定义视图类

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


如何设置⾃自定义视图类继承UIView。在初始化⽅方法中添加⼦子视图控件。

重写controllerloadView⽅方法。创建⾃自定义视图对象,并指定为controllerview

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

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


四、检测屏幕旋转

检测屏幕旋转

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

1. supportedInterfaceOrientations(设置设备⽀支持旋转的⽅方向)

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

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

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


视图处理注意视图控制器会⾃自动调整view的⼤大⼩小以适应屏幕旋转,bounds

被修改,触发viewlayoutSubviews⽅方法。

view重写layoutSubviews⽅方法,根据设备⽅方向,重新布局。

[UIApplication shareApplication].statusBarOrientation提供设备当前⽅方向。


练习4修改LoginView上视图的布局。

重写viewlayoutSubviews⽅方法。实现横屏时,三个控件显⽰示在同⼀一⾏行。

 横竖屏切换时,回收已经出现的键盘。

五、处理内存警告

处理内存警告

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


六、容器视图控制器

常⽤用⽅方法

self.view显⽰示:viewWillAppear: viewDidAppear:

self.view消失:viewWillDisappear: viewDidDisappear:

self.view添加到⽗父视图上时,执⾏行appear⽅方法: self.view从⽗父视图上移除时,执⾏行disappear⽅方法。

演⽰示执⾏行顺序

定义FirstViewControllerSecondViewController类,first作为window的根视图控制器。

SecondViewControllerview添加到FirstViewControllerview上。将SecondViewControllerview移除。查看SecondViewController4个⽅方法的执⾏行顺序。


总结

iOS提供了很多标准组件,标准组件完成我们的需要,但是适当的封装,组合⼀一个新的控件⽆无疑能给我们带来效率上的提⾼高。学会⾃自

定义控件是你成为⾼高⼿手的关键⼀一步。视图控制器是MVC中的C,⽤用于处理视图触发的事件。处理旋转和内存警告



课程预告事件UIEventUIResponder、响链 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值