2.1 iOS系统UI框架的介绍
在iOS系统的开发框架中,UIKit是专门负责界面渲染的一个框架,其中不仅封装了许多开发中常用的UI控件,如UILabel(标签)控件,UIButton(按钮)控件等,UIKit还集成了建立视图联系的视图控制器和交互用户操作的用户触摸事件等。UIKit框架的结构十分复杂,学习UIKit框架时,首先需要从大局着眼,熟悉框架的构成与其中模块间的联系,之后再从细节入手,从常用的控件类入手学起,多多积累,时常练习,由局部到整体逐渐掌握iOS 开发中UI的相关部分。
如图2-1所示为UIKit框架中类的结构与简易关系。UIKit框架中大致分为3个部分:
图2-1 UIKit框架的类结构与简易关系图
① 独立的UI视图控件。
② 充当视图控件载体的控制器类。
③ 管理触摸事件、手势操作、键盘操作等交互的管理类。
独立于UIKit框架之外,代理和通知中心的设计模式为开发者提供了UI属性变化的回调接口。由于各个模块是独立的,开发者可以十分方便地进行UI上的自定义与扩展操作,同时各个模块又各有接口关联,其在数据传递和逻辑交互上也井井有条毫不混乱。
2.1.1 MVC设计模式
MVC模式是一种传统的软件设计模式,其全称为Model(模型)-View(视图)-Controller (控制器)。在这种模式中,重新设计UI界面时不需要重复编写数据和逻辑相关的代码。在MVC模式中,数据由数据模型Model层管理,UI视图由View层管理,将View与数据进行关联,处理逻辑的相关操作交由控制器Controller层进行管理,View层与Controller层的分离,使得许多View可以进行复用,在一些开源的开发者社区也可以看到大量自定义的View层的控件,在项目中需要时,几乎不需要修改就可以直接使用。Model 层与View 层的分离使得Model层不再依赖View层,在数据模型没有改变的情况下,View层可以方便地重新进行设计。
在UIKit框架中,基础的独立控件就充当View层,控制器部分充当Controller层,数据层一般由开发者自行进行模型的设计和编写,在Controller中通过控件的功能接口将数据与控件关联。
2.1.2 代理设计模式
代理设计模式是软件编程中进行数据传递的一种重要方式,这种模式十分抽象但在UIKit框架中却随处可见。举一个例子来说明,古时候,盲人背着一个瘸子走路,瘸子看到前面有一个水坑,他告诉盲人让他绕过去,盲人听从瘸子的指挥,两人平安到达目的地。在这一组行为中,瘸子看到前面有障碍,可是瘸子不能走路;另一方面,盲人可以走路,但是他看不到,他不知道这个障碍是否存在。于是,语言沟通就充当了瘸子与盲人之间的代理,瘸子看到障碍后通过语言沟通将这个信息告诉盲人,盲人获取信息,绕过障碍。类比编程开发中,系统UI控件充当着故事中的瘸子的角色,开发者充当着盲人的角色,当系统UI控件接收到用户的一些动作行为时它并不知道应该怎么处理这些行为逻辑,于是通过代理方法将用户的这一动作告诉开发者,开发者在代理方法中处理相关的程序逻辑。
提示
代理这种设计模式比较抽象,对于初学者可能很难理解,不过读者不用担心,在后面具体讲解控件时会使用代理方法来处理交互逻辑,到时候可以再结合本小节内容进行理解,就会容易很多。