本文将演示如何在表单行内嵌拾取器。
在项目导航区,打开视图控制器的代码文件【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