UIDatePicker是一个可以用来选择日期和时间的控件。除此之外,它也可作为倒计时控件。
日期选择器(UIDatePicker)继承了UIControl,因此UIDatePicker可以作为活动控件使用,能与用户交互,既可在Interface Builder中为UIDatePicker的Value Changed事件绑定IBAction事件处理方法,也可在代码中为该控件绑定事件处理方法。
在Interface Builder中选中一个UIDatePicker,打开对应的属性检查器面板,即可看到如图10.42所示的面板。

图10.42  UIDatePicker对应的属性检查器

从图10.42可以看出,UIDatePicker支持如下属性。


1. Mode 该属性用于设置该UIDatePicker的模式,它支持如下列表项。

Date:该UIDatePicker控件仅显示日期,不显示时间。
Time:该UIDatePicker控件仅显示时间,不显示日期。
Date and Time:该UIDatePicker控件同时显示日期和时间。
Count Down Timer:该UIDatePicker控件仅显示为倒计时器。


2. Locale 该属性用于设置该UIDatePicker的国际化Locale,假设设置该UIDatePicker控件国际化Locale为简体中文环境,那么它将以简体中文习惯显示日期。实际上,我们通常无须手动设置Locale,该UIDatePicker控件默认使用iOS系统的国际化Locale。


3. Interval 仅当该UIDatePicker控件采用Time、Date and Time和Count Down Timer这三种模式时有效,该属性设置UIDatePicker控件上两个时间之间的间隔。

4. Constraints 该属性为UIDatePicker控件设置最小时间和最大时间。如果设置了该属性值,用户无法通过该UIDatePicker控件选择超出该范围的日期和时间。


5. Timer 仅当该UIDatePicker控件采用Count Down Timer模式时有效,该属性设置该控件作为倒计时控件时剩下的秒数。

下面通过一个简单的例子来示范UIDatePicker的功能和用法,先创建一个Single View Application,并使用Interface Builder打开应用的界面设计文件,将UIDatePicker和UIButton拖入应用界面中。对UIDatePicker进行如下修改。
使用Date and Time模式,让该选择器同时显示日期和时间。
将该UIDatePicker的Locale设为Chinese(Simplified),强制该UIDatePicker显示简体中文。
勾选Minimum Date和Maximum Date,并设置一个最小时间和最大时间。
进行上面的修改之后,将UIDatePicker与UIButton两个控件摆放整齐,如图10.43所示。

图10.43  设计应用界面

程序界面设计完成之后,在Interface Builder中将UIDatePicker控件绑定到datePicker IBOutlet属性,并为按钮的Touch Up Inside事件绑定clicked: IBAction事件处理方法。经过上面所示的步骤之后,接下来修改控制器类的实现部分代码,主要是实现clicked:事件处理方法,其代码如下。

程序清单:codes/10/10.11/UIDatePickerTest/UIDatePickerTest/FKViewController.m

上面程序中,clicked:方法的粗体字代码先获取UIDatePicker控件的日期、时间,然后程序创建了一个NSDateFormatter对象(日期格式器),并使用该日期格式器对用户选择的日期、时间执行格式化。最后使用一个UIAlertView显示用户选择的日期、时间。

编译、运行该程序,并通过UIDatePicker控件选择一个日期、时间,然后单击“确定”按钮,即可看到如图10.44所示的效果。

实例:倒计时器

如果将UIDatePicker的模式设置为Count Down Timer,即可让该控件作为倒计时器使用。当将UIDatePicker作为倒计时器使用时,程序还应该启动一个定时器定期更新该UIDatePicker的剩余时间。由此可见,把UIDatePicker作为Count Down Timer模式使用时,该控件最重要的属性就是countDownDuration,该属性代表该倒计时器的剩余时间,程序既可通过countDownDuration属性获取该控件的剩余时间,也可通过修改该属性来改变该控件显示的剩余时间。

下面通过示例介绍倒计时器的用法。首先创建一个Single View Application,并使用Interface Builder打开应用的界面设计文件,将UIDatePicker和UIButton拖入应用界面中。将UIDatePicker改为Count Down Timer模式,让该选择器作为定时器使用。进行上面的修改之后,将UIDatePicker与UIButton两个控件摆放整齐。

界面设计完成之后,在Interface Builder中将UIDatePicker控件绑定到countDown IBOutlet属性,将按钮控件绑定到startBn IBOutlet属性,并为按钮的Touch Up Inside事件绑定clicked: IBAction事件处理方法。经过上面的步骤之后,下面来修改控制器类的实现部分代码,主要是实现clicked:事件处理方法,其代码如下。

程序清单:codes/10/10.11/CountDownTest/CountDownTest/FKViewController.m

上述程序中,①号粗体字代码定义了一个leftSeconds变量,该变量用于保存倒计时器的剩余时间,当用户单击程序界面时,将会激发clicked:方法,该方法将启动一个定时器控制每隔60秒执行一次tickDown方法,而tickDown方法每执行一次,程序就将倒计时器的剩余时间减少60,并动态修改倒计时器的剩余时间,这样就可让UIDatePicker显示的剩余时间减少。

编译、运行该程序,通过UIDatePicker设置倒计时器的剩余时间后,单击“开始”按钮,即可看到该倒计时器每隔60秒跳动一次,跳动一次后,剩余时间减少1分钟,如图10.45所示。

————本文节选自《疯狂ios讲义(上)》

疯狂ios讲义疯狂连载之日期选择器(UIDatePicker)相关推荐

  1. 疯狂ios讲义疯狂连载之游戏的状态数据模型

    对游戏玩家而言在游戏界面上看到的"元素"千差万别.变化多端但对游戏开发者而言游戏界面上的元素在底层都是一些数据不同的数据所绘制的图片有所不同.因此建立游戏的状态数据模型是实现游戏逻 ...

  2. 疯狂ios讲义疯狂连载之显示动画

    UIImage专门用于显示各种位图该类支持表12.1所示的各种图片格式. 当系统内存紧张时UIImage会将图片数据从UIImage对象中清理出去来以节省系统内存这里的清理行为只是清理UIImage内 ...

  3. 疯狂ios讲义疯狂连载之加载界面的图片

    正如前面FKBaseBoard类的代码中所看到的,当程序需要创建N个FKPiece对象时,程序会直接调用getPlayImages()函数去获取图片,该函数将会随机从项目包下取得N张图片. 为了让ge ...

  4. 疯狂ios讲义疯狂连载之实现游戏视图控制器

    前面已经给出了游戏界面的布局文件,该布局文件需要使用一个视图控制器来负责显示.除此之外,视图控制器还需要为游戏界面的按钮事件提供事件监听器. 下面是该程序的视图控制器类的代码. 程序清单:codes/ ...

  5. 疯狂ios讲义疯狂连载之实现游戏逻辑(2)

    13.6.5 定义获取通道的工具方法 这里所谓的通道指的是一个方块上.下.左.右4个方向上的空白方块图13.10显示了一个方块四周的通道. 图13.10 方块四周的通道 下面是获取某个坐标点四周通道的 ...

  6. 疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧)

    疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧) 李刚 编 IS ...

  7. 疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础

    疯狂iOS 讲义(上)Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧) 李刚编 ISBN ...

  8. 疯狂ios讲义之网页控件(UIWebView)

    通过使用UIWebView控件,可以实现一个内置的浏览器(类似于Safari),而且可以直接将这个浏览器内嵌到应用的任意位置,因此非常方便. UIWebView直接继承了UIView基类,一般不可以与 ...

  9. 疯狂ios讲义之使用路径

    正如前面提到的Quartz 2D只提供了绘制矩形.椭圆的函数并没有直接提供绘制圆角矩形.三角形等几何图形的函数.为了绘制更复杂的图形必须启用路径. 表12.4列出了Quartz 2D为创建路径提供的函 ...

最新文章

  1. Windows10下安装unbuntu双系统 以及花屏解决办法
  2. C#中对于float,double,decimal的误解
  3. 不同特权级代码段之间的跳转
  4. python sqlite3加密_sqlite3加密 - kjpioo的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. Linux内核态抢占机制分析
  6. Msys2 国内源(2017.3.30)
  7. Linux 主机信息 总览
  8. mysql+性能+计算列_MYSQL性能优化的最佳20+条经验
  9. Pyhton随机生成测试数据模块faker
  10. [Machine Learning Algorithm] 决策树与迭代决策树(GBDT)
  11. ubuntu 14.04 root破解
  12. phpstorm设置背景图片
  13. java学生管理系统,(史上最全)
  14. MQTT和CoAP对比
  15. Java通过月份获取当月工作日
  16. 微信小程序引入字体图标 1
  17. 计算机二级中用函数制作工资条,教你用vlookup函数快速制作工资条
  18. 计算机上如何使用文件管理器,苹果iphone iFiles文件管理器使用图文教程
  19. [1164]python用numpy计算均值,方差,标准差
  20. 助你深刻理解——最长公共子串、最长公共子序列(应该是全网数一数二的比较全面的总结了)

热门文章

  1. 形象解释Momentum
  2. python读取文件名写入excel_Python实现读取并写入Excel文件过程解析
  3. 复杂update_Python 代码判断逻辑太复杂?这里有几条最佳实践和技巧
  4. Adobe Audition录制音频与剪辑
  5. 关闭页面刷新上层页面的几种方式
  6. Docker中宿主机与容器之间互传文件(docker cp的方式)
  7. MobileIMSDK连接后频繁掉线重连,提示会话超时失效,对方非正常退出或网络故障
  8. Android中怎样在项目中引入别的项目中正使用的library
  9. Jquery中绑定select的change事件自动填充input的value值
  10. SpringBoot中整合使用Freemarker