[Swift通天遁地]二、表格表单-(10)快速添加日期选择/多选/动作表单/地图等自定义表单
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10202030.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
本文将演示创建一个更加强大的表单。
Github项目:【Eureka】
下载该项目的源代码。
选择该项目中的几个文件,拖动到自己的开发项目中。按住【Shift】,选择
文件夹【Example】->选择
一个自定义的单元格的类文件【CustomCells.swift】
文件夹【Helpers】
文件夹【CustomRows】
->保持默认的设置选项,点击【Finish】
选择资源文件夹【Assets.xcassets】,导入项目中需要使用的图片。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
现在开始编写代码,创建一个更加强大的表单。
1 import UIKit 2 //首先在当前类文件中, 3 //引入以及安装的第三方类库 4 import Eureka 5 //引入地图的框架 6 import MapKit 7 8 //创建一个字符串的别名,并创建一系列的表情图标 9 typealias Emoji = String 10 let 👦🏼 = "👦🏼", 🍐 = "🍐", 💁🏻 = "💁🏻", 🐗 = "🐗", 🐼 = "🐼", 🐻 = "🐻", 🐖 = "🐖", 🐡 = "🐡" 11 12 //修改当前视图控制器类的父类的名称 13 class ViewController: FormViewController { 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 //设置网址行里的文本框的字体颜色为蓝色 19 URLRow.defaultCellUpdate = { cell, row in cell.textField.textColor = .blue} 20 //设置标签行的字体颜色为橙色 21 LabelRow.defaultCellUpdate = { cell, row in cell.detailTextLabel?.textColor = .orange} 22 //设置复选行行的前景颜色为橙色 23 CheckRow.defaultCellSetup = { cell, row in cell.tintColor = .orange} 24 //设置日期行的最小日期为当天的日期 25 DateRow.defaultRowInitializer = { row in row.minimumDate = Date()} 26 27 //往表单中添加一个新的段落 28 form = Section() 29 //往段落中添加一个标签行 30 <<< LabelRow () 31 { 32 //设置标签行的标题 33 $0.title = "LabelRow" 34 //设置标签行的默认值 35 $0.value = "tap the row" 36 } 37 //当用户点击该行时, 38 //往标签的文字内容中,添加一枚旗帜图标 39 .onCellSelection 40 { 41 cell, row in 42 row.title = (row.title ?? "") + " 🇺🇾 " 43 row.reload() 44 } 45 //添加一个日期表单行,并设置日期行的默认值和标题文字 46 <<< DateRow() 47 { 48 $0.value = Date() 49 $0.title = "DateRow" 50 } 51 //添加一个复选框表单行,并设置该行的标题文字和默认值 52 <<< CheckRow() 53 { 54 $0.title = "CheckRow" 55 $0.value = true 56 } 57 //添加一个Switch表单行,并设置该行的标题文字和默认值 58 <<< SwitchRow() 59 { 60 $0.title = "SwitchRow" 61 $0.value = true 62 } 63 //添加一个滑竿表单行,并设置该行的标题文字和默认值 64 <<< SliderRow() 65 { 66 $0.title = "SliderRow" 67 $0.value = 5.0 68 } 69 //添加一个步进表单行,并设置该行的标题文字和默认值 70 <<< StepperRow() { 71 $0.title = "StepperRow" 72 $0.value = 1.0 73 } 74 75 //添加一个新的段落,用来创建一些片段的示例 76 +++ Section("SegmentedRow examples") 77 78 //添加一个字符串类型的片段行, 79 //并设置该行拥有三个选项 80 <<< SegmentedRow<String>() { $0.options = ["One", "Two", "Three"] } 81 82 //添加一个表情图标类型的片段行 83 <<< SegmentedRow<Emoji>() 84 { 85 //设置该行的标题文字 86 $0.title = "Who are you?" 87 //拥有六个选项 88 $0.options = [💁🏻, 🍐, 👦🏼, 🐗, 🐼, 🐻 ] 89 //默认值 90 $0.value = 🍐 91 } 92 //添加一个字符串类型的片段行 93 <<< SegmentedRow<String>() 94 { 95 //设置该行的标题文字 96 $0.title = "SegmentedRow" 97 //拥有两个选项 98 $0.options = ["One", "Two"] 99 } 100 //设置该行的缩略图标 101 .cellSetup 102 { 103 cell, row in 104 cell.imageView?.image = UIImage(named: "plus_image") 105 } 106 //添加另一个字符串类型的片段行 107 <<< SegmentedRow<String>() 108 { 109 //设置该行拥有四个选项 110 $0.options = ["One", "Two", "Three", "Four"] 111 //默认值 112 $0.value = "Three" 113 } 114 //设置该行的缩略图标 115 .cellSetup 116 { 117 cell, row in 118 cell.imageView?.image = UIImage(named: "plus_image") 119 } 120 121 //在表单中添加另一个段落 122 +++ Section("Selectors Rows Examples") 123 124 //添加一个动作表单行,当点击此行时,将弹出一个动作表单 125 <<< ActionSheetRow<String>() 126 { 127 //设置该行的标题 128 $0.title = "ActionSheetRow" 129 //设置该行的选择器标题 130 $0.selectorTitle = "Your favourite player?" 131 //设置该行选项列表 132 $0.options = ["Diego Forlán", "Edinson Cavani", "Diego Lugano", "Luis Suarez"] 133 //默认值 134 $0.value = "Luis Suarez" 135 } 136 //添加一个警告行,当点击此行时,将弹出一个警告窗口 137 <<< AlertRow<Emoji>() 138 { 139 //设置该行的标题 140 $0.title = "AlertRow" 141 //设置该行的选择器标题 142 $0.selectorTitle = "Who is there?" 143 //设置该行选项列表 144 $0.options = [💁🏻, 🍐, 👦🏼, 🐗, 🐼, 🐻] 145 //默认值 146 $0.value = 👦🏼 147 } 148 //当值发生变化时 149 .onChange 150 { 151 row in 152 //在控制台输出该行的值 153 print(row.value) 154 } 155 //设置在展示时的前景颜色为紫色 156 .onPresent 157 { 158 _, to in 159 to.view.tintColor = .purple 160 } 161 162 //添加一个导航类型的表单行, 163 //当点击此行时,将在导航栈中压入一个新的页面 164 <<< PushRow<Emoji>() 165 { 166 //设置该行的标题 167 $0.title = "PushRow" 168 //设置该行选项列表 169 $0.options = [💁🏻, 🍐, 👦🏼, 🐗, 🐼, 🐻] 170 //默认值 171 $0.value = 👦🏼 172 //设置该行的选择器标题 173 $0.selectorTitle = "Choose an Emoji!" 174 } 175 176 //获得表单的最后一个段落 177 let section = form.last! 178 179 //在段落中添加要给地理坐标行 180 section 181 <<< LocationRow(){ 182 //设置该行的标题 183 $0.title = "LocationRow" 184 //默认值 185 $0.value = CLLocation(latitude: -34.91, longitude: -56.1646) 186 } 187 //添加一个图像表单行,并设置该行的标题 188 <<< ImageRow() 189 { 190 $0.title = "ImageRow" 191 } 192 //添加一个可进行多选操作的表单行 193 <<< MultipleSelectorRow<Emoji>() 194 { 195 //设置该行的标题 196 $0.title = "MultipleSelectorRow" 197 //设置该行选项列表 198 $0.options = [💁🏻, 🍐, 👦🏼, 🐗, 🐼, 🐻] 199 //默认值 200 $0.value = [👦🏼, 🍐, 🐗] 201 } 202 203 //再添加一个新的段落 204 //将在该段落中添加拾取器类型的表单行 205 form +++ Section("Generic picker") 206 //添加一个字符串类型的拾取器行 207 <<< PickerRow<String>("Picker Row") 208 { (row : PickerRow<String>) -> Void in 209 row.options = [] 210 //添加一个十次的循环语句,设置行的选项列表 211 for i in 1...10 212 { 213 row.options.append("option \(i)") 214 } 215 } 216 217 //添加一个新的段落 218 +++ Section("FieldRow examples") 219 220 //添加一个文本表单行 221 <<< TextRow() 222 { 223 //设置标题 224 $0.title = "TextRow" 225 //设置占位文本 226 $0.placeholder = "Placeholder" 227 } 228 //添加一个数字表单行 229 <<< DecimalRow() 230 { 231 //设置标题 232 $0.title = "DecimalRow" 233 //设置默认值 234 $0.value = 5 235 //对于数字表单行,我们可以设置它的数字格式 236 $0.formatter = DecimalFormatter() 237 //设置在用户输入时,实时对数字进行格式化 238 $0.useFormatterDuringInput = true 239 } 240 //设置该行的输入框的键盘类型,在此使用数字键盘 241 .cellSetup 242 { 243 cell, _ in 244 cell.textField.keyboardType = .numberPad 245 } 246 247 //添加一个网址行 248 <<< URLRow() 249 { 250 //设置标题 251 $0.title = "URLRow" 252 //设置默认值 253 $0.value = URL(string: "https://www.cnblogs.com/strengthen/") 254 } 255 //添加一个手机号码行 256 <<< PhoneRow() 257 { 258 //设置标题 259 $0.title = "PhoneRow (disabled)" 260 //设置默认值 261 $0.value = "+598 9898983510" 262 //是否激活 263 $0.disabled = true 264 } 265 //添加一个名称表单行 266 <<< NameRow() 267 { 268 //设置标题 269 $0.title = "NameRow" 270 } 271 //添加一个密码表单行 272 <<< PasswordRow() 273 { 274 //设置标题 275 $0.title = "PasswordRow" 276 //设置默认值 277 $0.value = "password" 278 } 279 //添加一个整数表单行 280 <<< IntRow() 281 { 282 //设置标题 283 $0.title = "IntRow" 284 //设置默认值 285 $0.value = 2015 286 } 287 //添加一个邮箱表单行 288 <<< EmailRow() 289 { 290 //设置标题 291 $0.title = "EmailRow" 292 //设置默认值 293 $0.value = "lifazhan@coolketang.com" 294 } 295 //添加一个特定类型的表单行 296 <<< TwitterRow() 297 { 298 //设置标题 299 $0.title = "TwitterRow" 300 //设置默认值 301 $0.value = "@tapinfinity" 302 } 303 //添加一个账户表单行 304 <<< AccountRow() 305 { 306 //设置标题 307 $0.title = "AccountRow" 308 //设置占位文本 309 $0.placeholder = "Placeholder" 310 } 311 //添加一个邮政编码表单行 312 <<< ZipCodeRow() 313 { 314 //设置标题 315 $0.title = "ZipCodeRow" 316 //设置占位文本 317 $0.placeholder = "101100" 318 } 319 } 320 321 override func didReceiveMemoryWarning() { 322 super.didReceiveMemoryWarning() 323 // Dispose of any resources that can be recreated. 324 } 325 }