[Swift通天遁地]二、表格表单-(18)快速应用多种预定义格式的表单验证

[Swift通天遁地]二、表格表单-(18)快速应用多种预定义格式的表单验证,第1张

概述本文将演示表单在提交时的数据验证。 在项目导航区,打开视图控制器的代码文件【ViewController.swift】 现在开始编写代码,给表单添加验证的功能。 1 import UIKit 2 //首先在当前类文件中, 3 //引入以及安装的第三方类库 4 import Eureka 5 6 //修改当前视图控制器类的父类的名称 7 class View

本文将演示表单在提交时的数据验证。

在项目导航区,打开视图控制器的代码文件【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)快速应用多种预定义格式的表单验证所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存