从用户界面设计的角度来讲,如果展示给用户的物件 与 现实生活中的物件 相似,那么 会 极大地 方便 用户的操作。比如:当用户 在iPhone应用程序中 看到 UIButton类型的按钮物件时,就会 本能地 知道 这个东西 可以按下去 因为 大家 都知道 现实生活中的按钮 该怎么用。
在iOS用户界面套件中 最广泛采用的现实世界中的模式 就是 选择器。UIPickerView类型的选择器 和 UIDatePick类型的日期选择器 对用户 都非常 友好。他们 都允许 用户 查看 大量的选项 并且 在这些选项中 做出 选择。在这篇博文中 我们 要大致 谈论一下 选择器 并且 制作 一个简单的运用日期选择器(UIDatePicker)的应用程序。而 在下一篇博文中 我们 还要更详细地 谈论 普通选择器(UIPickerView)。
选择器 和 日期选择器
如果 你 使用过 iPhone内置的日历应用程序,那么 你 肯定 有 很多机会 使用到 日期选择器,也就是 UIDatePicker类型的物件。日期选择器 允许 用户 用 友好、逼真的方式 选择 日期 和 时间。下面图片中 就是 一个典型的日期选择器:
这个选择器 由几个轮子 构成,在默认的情况下 每个轮子 可以 独立地 转动。轮子上的每个项目 代表 一个选项。轮子上的某个项目 位于 高亮的条形区域中 就表明 这个项目 被用户 选择。
日期选择器这类物件 属于 预先设计好的选择器类型物件,专门用来 选择 日期 和 时间。而 选择器类型的物件 允许 开发者 自行 设计 以满足 不同的需求。
关于日期选择器的例子
我们 从创建 一个非常简单的应用程序 开始 介绍 iOS中选择器的概念。这个应用程序 包含 一个日期选择器、一个标签 和 一个按钮。当用户 按下 按钮时,日期选择器中选中的日期 和 时间 就会显示 在标签上。
我们 在Xcode中 利用 单视图应用程序模板 创建 一个新的项目。同时 不要选择 “使用故事板”的选项 并且 将 产品名称 和 物件类型名称前缀 都设定为 datePicker。创建好 项目后,我们 打开 datePickerViewController.h这个文件 并且 修改成 这样:
这样一来 每个datePickerViewController类型的视图控制器物件 都包含 一个UIDatePicker类型的日期选择器物件datePicker 和 一个UILabel类型的标签物件dateLabel。同时 getSelection这项措施 适用于 datePickerViewController类型的物件。我们 对datePickerViewController类型的物件 采取 getSelection这项措施 来获取 日期选择器中被选择的数据。
设计 用户界面
然后 我们 打开 datePickerViewController.xib这个文件。并且 从物件库中 将 一个日期选择器物件、标签物件 和 按钮物件 拖、放 到 画布中的视图上:
注意 标签的文本 应该居中 并且 标签的左右边界 都应该伸展 到离屏幕边缘不远处。
接着 应该将 datePickerViewController.xib中的日期选择器 和 标签 与 datePickerViewController.h这个文件中的datePicker 和 dateLabel两个物件 连接起来。然后 还要将 按钮的Touch Up Inside事件 和 适用于datePickerViewController这类物件的措施getSelection 连接起来。这样一来 用户 一点击 这个按钮,就会对 datePickerViewController类型的物件 采取 getSelection这项措施。于是 我们 需要在getSelection这项措施中 编写 代码 来获取 日期选择器中的数据。
编写 代码 实现 日期选择器的功能
目前 我们这个应用程序所需的物件 都设计好了 而且 用户界面 也设计好了,最后 我们 需要编写 代码 使 这个应用程序 工作起来。因为 用户 一点击 界面中的按钮 就会对datePickerViewController类型的物件 采取 getSelection这项措施,所以 getSelection这项措施 是 我们唯一需要编写代码的地方。
于是 我们 打开 datePickerViewController.m这个文件 并且 在@implementation命令后 加入 这行语句:
以便生成 datePicker、setDatePicker: 与 dateLabel、setDateLabel:两对措施。
然后 再 添加 getSelection这项措施:
在getSelection这项措施当中
这行语句 利用字符串”zh_CN” 创建了 一个NSLocale类型的区域格式物件cnLocale 用以代表 中国区域格式。
这行语句 对datePickerViewController类型的视图控制器所包含的日期选择器datePicker 采取了 date这项措施,从而 获取了 日期选择器中当前选择的日期 和 时间 并且 存储 在seletedDate当中。
这行语句 先对刚才从日期选择器中获取的数据selectedDate 采取了 descriptionWithLocale这项措施 并且 以中国区域格式 做为 参数 从而 将 日期选择器中的日期 和 时间 转换成 中国区域格式,然后 以 此 为内容 创建了 一个字符串stringWithSelectedDate。
最后的
这行语句 将 包含有所选日期 和 时间的字符串 存储 在标签物件dateLabel中的文本text里。
在编译 并且 运行 这个程序之前 不要忘记 清理内存:
编译 并且 运行 这个程序
当这个程序 开始运行后,我们 从日期选择器中 随意 选择 一个日期 和 时间,然后 点击 标签下方的按钮 就可以看到 这样的结果: