[Swift通天遁地]二、表格表单-(16)在表单行内嵌入日期和时间拾取器

时间:2021-03-02 17:09:41

本文将演示如何在表单行内嵌拾取器。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

现在开始编写代码,实现在表单行内嵌入日期和时间拾取器。

  1 import UIKit
  2 //首先在当前类文件中,
  3 //引入以及安装的第三方类库
  4 import Eureka
  5 
  6 //修改当前视图控制器类的父类的名称
  7 class ViewController: FormViewController {
  8     
  9     override func viewDidLoad() {
 10         super.viewDidLoad()
 11         
 12         //设置内行隐藏属性,允许在表单内同时显示多个拾取器
 13         //form.inlineRowHideOptions = InlineRowHideOptions.FirstResponderChanges
 14 
 15         //设置在表单中,同时只允许显示一个拾取器。
 16         //将嵌入行的隐藏选项,调整为一次只显示单个的拾取器。
 17         form.inlineRowHideOptions = InlineRowHideOptions.AnotherInlineRowIsShown
 18 
 19         //往表单中添加一个新的段落
 20         form
 21             +++ Section()
 22             //添加一个日期嵌入行
 23             <<< DateInlineRow()
 24             {
 25                 //设置本行的标题文字
 26                 $0.title = "DateInlineRow"
 27                 //设置本行的默认值
 28                 $0.value = Date()
 29             }
 30             //添加一个时间嵌入行
 31             <<< TimeInlineRow()
 32             {
 33                 //设置本行的标题文字
 34                 $0.title = "TimeInlineRow"
 35                 //设置本行的默认值
 36                 $0.value = Date()
 37             }
 38             //添加一个日期和时间嵌入行
 39             <<< DateTimeInlineRow()
 40             {
 41                 //设置本行的标题文字
 42                 $0.title = "DateTimeInlineRow"
 43                 //设置本行的默认值
 44                 $0.value = Date()
 45             }
 46             //添加一个计时嵌入行
 47             <<< CountDownInlineRow()
 48             {
 49                 //设置本行的标题文字
 50                 $0.title = "CountDownInlineRow"
 51                 
 52                 //初始化一个日期组件对象
 53                 var dateComp = DateComponents()
 54                 //设置日期组件对象的小时
 55                 dateComp.hour = 18
 56                 //设置日期组件对象的分钟
 57                 dateComp.minute = 33
 58                 //设置日期组件对象的时区
 59                 dateComp.timeZone = TimeZone.current
 60                 
 61                 //设置当前表单行的默认值
 62                 $0.value = Calendar.current.date(from: dateComp)
 63             }
 64             
 65             //添加一个新的段落,并设置其标题文字
 66             +++ Section("Generic inline picker")
 67             //添加一个拾取器嵌入行
 68             <<< PickerInlineRow<Date>("PickerInlineRow")
 69             {
 70                 (row : PickerInlineRow<Date>) -> Void in
 71                 //设置该行的标题和标记的值相同
 72                 row.title = row.tag
 73                 //设置该行显示的值的内容
 74                 row.displayValueFor =
 75                 {
 76                     (rowValue: Date?) in
 77                     //返回日期的年份作为该行的显示内容
 78                     return rowValue.map { "Year \(Calendar.current.component(.year, from: $0))" }
 79                 }
 80                 
 81                 //初始化当前行的选项
 82                 row.options = []
 83                 //并获得当天的日期
 84                 var date = Date()
 85                 //通过一个循环语句
 86                 for _ in 1...10
 87                 {
 88                     //将今后10年的日期,添加到选项数组中。
 89                     row.options.append(date)
 90                     date = date.addingTimeInterval(60*60*24*365)
 91                 }
 92                 
 93                 //设置当前行的默认值为数组中的第一个元素
 94                 row.value = row.options[0]
 95         }
 96     }
 97 
 98     override func didReceiveMemoryWarning() {
 99         super.didReceiveMemoryWarning()
100         // Dispose of any resources that can be recreated.
101     }
102 }

注意上文中修改的代码,设置在表单中,同时只允许显示一个拾取器。

1 //设置内行隐藏属性,允许在表单内同时显示多个拾取器
2 form.inlineRowHideOptions = InlineRowHideOptions.FirstResponderChanges
3 
4 //设置在表单中,同时只允许显示一个拾取器。
5 //将嵌入行的隐藏选项,调整为一次只显示单个的拾取器。
6 form.inlineRowHideOptions = InlineRowHideOptions.AnotherInlineRowIsShown