本文将演示表单在提交时的数据验证。
在项目导航区,打开视图控制器的代码文件【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 LabelRow.defaultCellUpdate = 14 { 15 cell,row in 16 //设置背景颜色为红色 17 cell.contentVIEw.backgroundcolor = .red 18 //设置字体的颜色为白色 19 cell.textLabel?.textcolor = .white 20 //设置字体的样式 21 cell.textLabel?.Font = UIFont.boldSystemFont(ofSize: 13) 22 //设置文字的对齐方式 23 cell.textLabel?.textAlignment = .right 24 } 25 //设置文本行的视觉变化 26 TextRow.defaultCellUpdate = 27 { 28 cell,row in 29 //当验证失败时 30 if !row.isValID 31 { 32 //设置字体的颜色为红色 33 cell.TitleLabel?.textcolor = .red 34 } 35 } 36 37 38 form 39 //在表单中添加一个段落,并设置段落的头部和尾部信息 40 +++ Section(header: "required Rule", 41 footer: "Options: ValIDates on change") 42 //在该段落中添加一个文本 43 <<< TextRow() 44 { 45 //设置本行的标题文字 46 $0.Title = "required Rule" 47 //添加验证的规则为非空, 48 //如果该行的内容为空,则会提示验证错误。 49 $0.add(rule: Rulerequired()) 50 //设置值发生变化时进行验证 51 $0.valIDationoptions = .valIDatesOnChange 52 } 53 54 //在表单中添加一个段落,并设置段落的头部和尾部信息 55 +++ Section(header: "Email Rule,required Rule", 56 footer: "Options: ValIDates on change after blurred") 57 58 //在该段落中添加一个文本 59 <<< TextRow() 60 { 61 //设置本行的标题文字 62 $0.Title = "Email Rule" 63 //添加验证的规则为非空, 64 //如果该行的内容为空,则会提示验证错误。 65 $0.add(rule: Rulerequired()) 66 //创建一个字符串类型的规则集合 67 var ruleSet = RuleSet<String>() 68 //添加非空验证 69 ruleSet.add(rule: Rulerequired()) 70 //添加邮箱验证 71 ruleSet.add(rule: RuleEmail()) 72 //将规则集合赋予当前的表单行 73 $0.add(ruleSet: ruleSet) 74 //设置当失去焦点,并且内容发生变化时,进行表单的验证。 75 $0.valIDationoptions = .valIDatesOnChangeAfterBlurred 76 } 77 78 //在表单中添加一个段落,并设置段落的头部和尾部信息 79 +++ Section(header: "URL Rule", 80 footer: "Options: ValIDates on change") 81 82 //添加一个网址行 83 <<< URLRow() 84 { 85 //设置本行的标题文字 86 $0.Title = "URL Rule" 87 //添加网址格式的验证 88 $0.add(rule: RuleURL()) 89 //设置值发生变化时进行验证 90 $0.valIDationoptions = .valIDatesOnChange 91 } 92 //设置单元格的刷新动作 93 .cellUpdate 94 { 95 cell,row in 96 //当验证失败时 97 if !row.isValID 98 { 99 //设置单元格的字体颜色为红色100 cell.TitleLabel?.textcolor = .red101 }102 }103 104 //在表单中添加一个段落,并设置段落的头部和尾部信息105 +++ Section(header: "MinLength 8 Rule,MaxLength 13 Rule",106 footer: "Options: ValIDates on blurred")107 //添加一个密码行 108 <<< PasswordRow()109 {110 //设置本行的标题文字111 $0.Title = "Password"112 //添加验证规则:113 //设置最小长度为8114 $0.add(rule: RuleMinLength(minLength: 8))115 //设置最大长度为13116 $0.add(rule: RuleMaxLength(maxLength: 13))117 //用户需要输入最小长度和最大长度之间的内容118 }119 //设置单元格的刷新动作120 .cellUpdate121 {122 cell,row in123 //当验证失败时124 if !row.isValID125 {126 //设置单元格的字体颜色为红色127 cell.TitleLabel?.textcolor = .red128 }129 }130 131 //添加一个段落,并设置段落的头部和尾部的信息132 +++ Section(header: "Should be GreaterThan 2 and SmallerThan 999",133 footer: "Options: ValIDates on blurred")134 135 //添加一个整数行136 <<< IntRow()137 {138 //设置本行的标题文字139 $0.Title = "Range Rule"140 //添加验证规则:允许用户输入2~999之间的整数141 $0.add(rule: RuleGreaterThan(min: 2))142 $0.add(rule: RuleSmallerThan(max: 999))143 }144 //设置单元格的刷新动作145 .cellUpdate146 {147 cell,row in148 //当验证失败时149 if !row.isValID150 {151 //设置单元格的字体颜色为红色152 cell.TitleLabel?.textcolor = .red153 }154 }155 156 //添加一个段落,并设置段落的头部和尾部的信息157 +++ Section(header: "Match fIEld values",footer: "Options: ValIDates on blurred")158 159 //添加一个密码行160 <<< PasswordRow("password")161 {162 //设置本行的标题文字163 $0.Title = "Password"164 }165 //添加一个密码行166 <<< PasswordRow()167 {168 //设置本行的标题文字169 $0.Title = "Confirm Password"170 //添加验证规则:设置长度为8~13171 $0.add(rule: RuleMinLength(minLength: 8))172 $0.add(rule: RuleMaxLength(maxLength: 13))173 }174 //设置单元格的刷新动作175 .cellUpdate176 { cell,row in177 //当验证失败时178 if !row.isValID179 {180 //设置单元格的字体颜色为红色181 cell.TitleLabel?.textcolor = .red182 }183 }184 185 //添加一个段落,并设置段落的头部和尾部的信息186 +++ Section(header: "More sophisticated valIDations UX using callbacks",footer: "")187 188 //添加一个文本行189 <<< TextRow()190 {191 //设置本行的标题文字192 $0.Title = "required Rule"193 //添加验证规则:非空194 $0.add(rule: Rulerequired())195 //设置值发生变化时进行验证196 $0.valIDationoptions = .valIDatesOnChange197 }198 //设置单元格的刷新动作199 .cellUpdate200 {201 cell,row in202 //当验证失败时203 if !row.isValID204 {205 //设置单元格的字体颜色为红色206 cell.TitleLabel?.textcolor = .red207 }208 }209 //设置单元格的在验证发生变化时的情况210 .onRowValIDationChanged211 {212 cell,row in213 //获得当前表单行在表单中的序号214 let rowIndex = row.indexPath!.row215 //遍历216 while row.section!.count > rowIndex + 1 && row.section?[rowIndex + 1] is LabelRow217 {218 //删除当前段落的错误信息标签219 row.section?.remove(at: rowIndex + 1)220 }221 //当验证失败时222 if !row.isValID223 {224 //对所有的错误信息进行遍历225 for (index,valIDationMsg) in row.valIDationErrors.map({ $0.msg }).enumerated()226 {227 //创建一个标签表单行228 let labelRow = LabelRow()229 {230 //设置本行的标题文字为错误信息231 $0.Title = valIDationMsg232 //同时设置单元格的高度233 $0.cell.height = { 30 }234 }235 //将标签行,插入到当前行的下方236 row.section?.insert(labelRow,at: row.indexPath!.row + index + 1)237 }238 }239 }240 //添加一个邮箱表单行241 <<< EmailRow()242 {243 //设置本行的标题文字244 $0.Title = "Email Rule"245 //添加验证规则:246 //非空规则247 $0.add(rule: Rulerequired())248 //邮箱格式规则249 $0.add(rule: RuleEmail())250 //设置当失去焦点,并且内容发生变化时进行表单的验证。251 $0.valIDationoptions = .valIDatesOnChangeAfterBlurred252 }253 //设置单元格的刷新动作254 .cellUpdate255 {256 cell,row in257 //当验证失败时258 if !row.isValID259 {260 //设置单元格的字体颜色为红色261 cell.TitleLabel?.textcolor = .red262 }263 }264 //处理单元格在验证发生变化时的情况265 .onRowValIDationChanged266 {267 cell,row in268 //获得当前表单行在表单中的序号269 let rowIndex = row.indexPath!.row270 while row.section!.count > rowIndex + 1 && row.section?[rowIndex + 1] is LabelRow271 {272 //删除当前段落的错误信息标签273 row.section?.remove(at: rowIndex + 1)274 }275 //当验证失败时276 if !row.isValID277 {278 //对所有的错误信息进行遍历279 for (index,valIDationMsg) in row.valIDationErrors.map({ $0.msg }).enumerated()280 {281 //创建一个标签表单行282 let labelRow = LabelRow()283 {284 //设置本行的标题文字为错误信息285 $0.Title = valIDationMsg286 //同时设置单元格的高度287 $0.cell.height = { 30 }288 }289 //将标签行,插入到当前行的下方290 row.section?.insert(labelRow,at: row.indexPath!.row + index + 1)291 }292 }293 }294 //添加一个网址行295 <<< URLRow()296 {297 //设置本行的标题文字298 $0.Title = "URL Rule"299 //添加验证规则,为网址格式的验证300 $0.add(rule: RuleURL())301 //设置当值发生变化时进行验证302 $0.valIDationoptions = .valIDatesOnChange303 }304 //设置表单的刷新动作305 .cellUpdate306 {307 cell,row in308 //当验证失败时309 if !row.isValID310 {311 //设置单元格的字体颜色为红色312 cell.TitleLabel?.textcolor = .red313 }314 }315 //处理单元格在验证发生变化时的情况316 .onRowValIDationChanged317 {318 cell,row in319 //获得当前表单行在表单中的序号320 let rowIndex = row.indexPath!.row321 while row.section!.count > rowIndex + 1 && row.section?[rowIndex + 1] is LabelRow322 {323 //删除当前段落的错误信息标签324 row.section?.remove(at: rowIndex + 1)325 }326 //当验证失败时327 if !row.isValID328 {329 //对所有的错误信息进行遍历330 for (index,valIDationMsg) in row.valIDationErrors.map({ $0.msg }).enumerated()331 {332 //创建一个标签表单行333 let labelRow = LabelRow()334 {335 //设置本行的标题文字为错误信息336 $0.Title = valIDationMsg337 //同时设置单元格的高度338 $0.cell.height = { 30 }339 }340 //将标签行,插入到当前行的下方341 row.section?.insert(labelRow,at: row.indexPath!.row + index + 1)342 }343 }344 }345 //添加一个密码行346 <<< PasswordRow("password2")347 {348 //设置本行的标题文字349 $0.Title = "Password"350 //添加验证规则:长度为8~13351 $0.add(rule: RuleMinLength(minLength: 8))352 $0.add(rule: RuleMaxLength(maxLength: 13))353 }354 //设置表单的刷新动作355 .cellUpdate356 {357 cell,row in358 //当验证失败时359 if !row.isValID360 {361 //设置单元格的字体颜色为红色362 cell.TitleLabel?.textcolor = .red363 }364 }365 //处理单元格在验证发生变化时的情况366 .onRowValIDationChanged367 {368 cell,row in369 //获得当前表单行在表单中的序号370 let rowIndex = row.indexPath!.row371 while row.section!.count > rowIndex + 1 && row.section?[rowIndex + 1] is LabelRow372 {373 //删除当前段落的错误信息标签374 row.section?.remove(at: rowIndex + 1)375 }376 //当验证失败时377 if !row.isValID378 {379 //对所有的错误信息进行遍历380 for (index,valIDationMsg) in row.valIDationErrors.map({ $0.msg }).enumerated()381 {382 //创建一个标签表单行383 let labelRow = LabelRow()384 {385 //设置本行的标题文字为错误信息386 $0.Title = valIDationMsg387 //同时设置单元格的高度388 $0.cell.height = { 30 }389 }390 //将标签行,插入到当前行的下方391 row.section?.insert(labelRow,at: row.indexPath!.row + index + 1)392 }393 }394 }395 //添加一个密码行396 <<< PasswordRow()397 {398 //设置本行的标题文字399 $0.Title = "Confirm Password"400 //添加验证规则:长度为8~13401 $0.add(rule: RuleMinLength(minLength: 8))402 $0.add(rule: RuleMaxLength(maxLength: 13))403 }404 //设置表单的刷新动作405 .cellUpdate406 {407 cell,row in408 //当验证失败时409 if !row.isValID410 {411 //设置单元格的字体颜色为红色412 cell.TitleLabel?.textcolor = .red413 }414 }415 //处理单元格在验证发生变化时的情况416 .onRowValIDationChanged417 {418 cell,row in419 //获得当前表单行在表单中的序号420 let rowIndex = row.indexPath!.row421 while row.section!.count > rowIndex + 1 && row.section?[rowIndex + 1] is LabelRow422 {423 //删除当前段落的错误信息标签424 row.section?.remove(at: rowIndex + 1)425 }426 //当验证失败时427 if !row.isValID428 {429 //对所有的错误信息进行遍历430 for (index,valIDationMsg) in row.valIDationErrors.map({ $0.msg }).enumerated()431 {432 //创建一个标签表单行433 let labelRow = LabelRow()434 {435 //设置本行的标题文字为错误信息436 $0.Title = valIDationMsg437 //同时设置单元格的高度438 $0.cell.height = { 30 }439 }440 //将标签行,插入到当前行的下方441 row.section?.insert(labelRow,at: row.indexPath!.row + index + 1)442 }443 }444 }445 //添加一个整数行446 <<< IntRow()447 {448 //设置本行的标题文字449 $0.Title = "Range Rule"450 //添加验证规则:允许输入2`999之间的整数451 $0.add(rule: RuleGreaterThan(min: 2))452 $0.add(rule: RuleSmallerThan(max: 999))453 }454 //设置表单的刷新动作455 .cellUpdate456 {457 cell,row in458 //当验证失败时459 if !row.isValID460 {461 //设置单元格的字体颜色为红色462 cell.TitleLabel?.textcolor = .red463 }464 }465 //处理单元格在验证发生变化时的情况466 .onRowValIDationChanged467 {468 cell,row in469 //获得当前表单行在表单中的序号470 let rowIndex = row.indexPath!.row471 while row.section!.count > rowIndex + 1 && row.section?[rowIndex + 1] is LabelRow472 {473 //删除当前段落的错误信息标签474 row.section?.remove(at: rowIndex + 1)475 }476 //当验证失败时477 if !row.isValID478 {479 //对所有的错误信息进行遍历480 for (index,valIDationMsg) in row.valIDationErrors.map({ $0.msg }).enumerated()481 {482 //创建一个标签表单行483 let labelRow = LabelRow()484 {485 //设置本行的标题文字为错误信息486 $0.Title = valIDationMsg487 //同时设置单元格的高度488 $0.cell.height = { 30 }489 }490 //将标签行,插入到当前行的下方491 row.section?.insert(labelRow,at: row.indexPath!.row + index + 1)492 }493 }494 }495 496 //添加一个新的段落497 +++ Section()498 //在该段落中国添加一个按钮行499 <<< buttonRow()500 {501 //设置本行的标题文字为错误信息502 $0.Title = "Tap to force form valIDation"503 }504 //当表单处于选择状态时505 .onCellSelection506 {507 cell,row in508 //强制校验表单中的所有元素509 row.section?.form?.valIDate()510 }511 }512 513 overrIDe func dIDReceiveMemoryWarning() {514 super.dIDReceiveMemoryWarning()515 // dispose of any resources that can be recreated.516 }517 }总结
以上是内存溢出为你收集整理的[Swift通天遁地]二、表格表单-(18)快速应用多种预定义格式的表单验证全部内容,希望文章能够帮你解决[Swift通天遁地]二、表格表单-(18)快速应用多种预定义格式的表单验证所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)