原文:http://coolketang.com/staticCoding/5a995104ac502e5d51cce462.html
1. 本节课将为您演示,表单在提交时的数据验证。首先在左侧的项目导航区,打开视图控制器的代码文件。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/4e1a8f22f85f0f17f49f58b63da7c5c8.webp?x-image-process=image/format,png)
2. 现在开始编写代码,给表单添加验证的功能。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/cb629d19757df4d89d04777002ed0dea.webp?x-image-process=image/format,png)
3. 在当前的类文件中,引入已经安装的第三方类库。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/12f4e5ffc1bf524b1dd636da5e30ad50.webp?x-image-process=image/format,png)
4. 然后修改当前视图控制器类的父类的名称。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/67dad138876fed17f227ab7b05f7e27e.webp?x-image-process=image/format,png)
5. 设置当验证失败时,标签行的视觉刷新事件。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/7a0e8feba050b42b87844ac127be90eb.webp?x-image-process=image/format,png)
6. 设置背景颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/780e917d0118618ef39f72636afefeb2.webp?x-image-process=image/format,png)
7. 然后设置字体的颜色为白色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/9aa2c6644d92d0ddf433f32a29ae3ad8.webp?x-image-process=image/format,png)
8. 接着依次设置字体的样式,以及文字的对齐方式。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/6170cd697aa030b120977cc00f98005b.webp?x-image-process=image/format,png)
9. 设置文本行的视觉变化。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/52ad465fc78042afbad337edeec588d1.webp?x-image-process=image/format,png)
10. 当验证失败时,设置字体的颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/9412b8744d90499c7822bdec9e2e35ea.webp?x-image-process=image/format,png)
11. 接着在表单中添加一个段落,并设置段落的头部和尾部信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/534b54e24659169d86860fd98548a321.webp?x-image-process=image/format,png)
12. 在该段落中添加一个文本行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/60464a2d72fd7759f62909a1013e5d0d.webp?x-image-process=image/format,png)
13. 接着添加验证规则为非空,如果该行的内容为空,则会提示验证错误。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0140a373d22c26eabf4125015b981c77.webp?x-image-process=image/format,png)
14. 添加一个段落,并设置段落的头部和尾部信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/91b9c07dc68c02063a8fd67e6f7f5b65.webp?x-image-process=image/format,png)
15. 在该段落中添加一个文本行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/a68be0fe6db9cef6c160043cec32a6b9.webp?x-image-process=image/format,png)
16. 接着添加验证规则为非空,如果该行的内容为空,则会提示验证错误。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/89f6ee19b284ba42e54c0c265fa53d76.webp?x-image-process=image/format,png)
17. 创建一个字符串类型的规则集合。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/2e00d66dc5be62374b4c4d550eea7bc1.webp?x-image-process=image/format,png)
18. 然后添加非空验证和邮箱验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/91c4e12dd3579479f0788df40ec8c58d.webp?x-image-process=image/format,png)
19. 将规则集合赋予当前的表单行。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/f02fc9a906981f1a830ff6f0713ca826.webp?x-image-process=image/format,png)
20. 然后设置当失去焦点,并且内容发生变化时,进行表单的验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/cf3f1a3673de6a3d5794f7769fc58d70.webp?x-image-process=image/format,png)
21. 添加一个段落,并设置段落的头部和尾部信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/de53ef598a67b364063ce390e34456a0.webp?x-image-process=image/format,png)
22. 在该段落中添加一个网址行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/f4cda81c417f617bc7b4bd3d82554729.webp?x-image-process=image/format,png)
23. 接着添加验证规则为网址格式的验证,并且在值发生变化时进行验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/e362804bcc830174b52902b7f14e3afa.webp?x-image-process=image/format,png)
24. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/75e03fe9b46f9c0d5ef45959767e3ccc.webp?x-image-process=image/format,png)
25. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/4e12bcf5904689d146fce577253ad1d1.webp?x-image-process=image/format,png)
26. 添加一个段落,并设置段落的头部和尾部的信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/9ac58626c0bf8a709ea45ae519c13f7a.webp?x-image-process=image/format,png)
27. 在该段落中添加一个密码行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0775e4e00f2d7596e7ce1f934c31ad51.webp?x-image-process=image/format,png)
28. 接着添加验证规则,设置最小的长度为8,最大的长度为13。用户需要输入最小长度和最大长度之间的内容。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/62e278e32d0c3bc222f35a3802ef6788.webp?x-image-process=image/format,png)
29. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/df81112841ee2628c62de7b5b761e62c.webp?x-image-process=image/format,png)
30. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c3521a5f0450aaf4ccbf6ac8c1d89660.webp?x-image-process=image/format,png)
31. 添加一个段落,并设置段落的头部和尾部的信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/e30ec3fb1d31ca0ea28b3bdea098ed8e.webp?x-image-process=image/format,png)
32. 在该段落中添加一个整数行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/fb9f1b3b7e4efbe702a677c1c782f902.webp?x-image-process=image/format,png)
33. 接着添加验证规则为,允许用户输入2到999之间的整数。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/774b2735f488ed4e541eef852c04b0e8.webp?x-image-process=image/format,png)
34. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/af7ca711f81276a857fec7309c6ac90f.webp?x-image-process=image/format,png)
35. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/a169c890f69198e75f5f6fbd476607a3.webp?x-image-process=image/format,png)
36. 添加一个段落,并设置段落的头部和尾部的信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b7bc1e59343a943fafcad44bb9ef3d9d.webp?x-image-process=image/format,png)
37. 在该段落中添加一个密码行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/2ca7c31091167ca95da1090262cc9cb3.webp?x-image-process=image/format,png)
38. 添加另一个密码行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/061c57e7797e1848597f2583ac51754e.webp?x-image-process=image/format,png)
39. 接着添加验证规则,设置最小的长度为8,最大的长度为13。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/868265fb3c99833054f7a3dc0f619a98.webp?x-image-process=image/format,png)
40. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/1e51d491a77e3528b1edf17e4d854eea.webp?x-image-process=image/format,png)
41. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/1fc6db928dd7cdb6d476f85f5c269cb4.webp?x-image-process=image/format,png)
42. 继续添加一个段落,并设置段落的头部和尾部的信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/8477fa4d2fd01282b8f624ae18a953ff.webp?x-image-process=image/format,png)
43. 在该段落中添加一个文本行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0b2b0cd5394f1d9e6b0e2849061e78cc.webp?x-image-process=image/format,png)
44. 接着添加验证规则为非空的规则,并且在值发生变化时进行验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/2fa76a4652e2d6ceecb04af35f371eea.webp?x-image-process=image/format,png)
45. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/3ffa99ebd4c870beea58afa93591545b.webp?x-image-process=image/format,png)
46. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/24e880e52d90a2d374742e869df1bfcd.webp?x-image-process=image/format,png)
47. 设置单元格的在验证发生变化时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/61207e9248abad298fae939771f2df71.webp?x-image-process=image/format,png)
48. 获得当前表单行在表单中的序号。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/cb41760f5460519be205a48c0c1d6cc9.webp?x-image-process=image/format,png)
49. 然后删除当前段落的错误信息标签。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b1a2b85cec746e20290f2d41081d24d1.webp?x-image-process=image/format,png)
50. 接着处理当验证失败时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/45c82cd4dc63537c62b119b85ad3ac86.webp?x-image-process=image/format,png)
51. 对所有的错误信息进行遍历。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/a37abf40619422d480fe1a89a943d12f.webp?x-image-process=image/format,png)
52. 创建一个标签表单行,并设置标签的标题文字为错误信息,同时设置单元格的高度。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b9b0673b1b06f1c6d9634107335fe94c.webp?x-image-process=image/format,png)
53. 接着将标签行,插入到当前行的下方。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/00253b5596e48690915912c102fba0cc.webp?x-image-process=image/format,png)
54. 继续在该段落中添加一个邮箱表单行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/41a4087ad3acae1e418f3248a0cf9850.webp?x-image-process=image/format,png)
55. 接着添加验证规则,为非空规则和邮箱格式的验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c88f3972965e21676f9b1f8c280d4916.webp?x-image-process=image/format,png)
56. 设置当失去焦点,并且内容发生变化时,进行表单的验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/6e39068056fcb30e56fce4ebcebdc350.webp?x-image-process=image/format,png)
57. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/f6dee812d0d7a27eb48de96706dc98e8.webp?x-image-process=image/format,png)
58. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c21f66ac0b29c414c0982f326e4a0e6e.webp?x-image-process=image/format,png)
59. 处理单元格在验证发生变化时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/24df342976c8f22e65cebcdebfd42774.webp?x-image-process=image/format,png)
60. 获得当前表单行在表单中的序号。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/cec08c3ab8d02ba84c7252667955a5e6.webp?x-image-process=image/format,png)
61. 然后删除当前段落的错误信息标签。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/da3f992de477641b0bf358a8a115e9f1.webp?x-image-process=image/format,png)
62. 接着处理验证失败时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/84f367aab8479e6c0496a20d01cff850.webp?x-image-process=image/format,png)
63. 对所有的错误信息进行遍历。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/65eaa147b188cc1da36578d0dc94af3a.webp?x-image-process=image/format,png)
64. 创建一个标签表单行,并设置标签的标题文字为错误信息,同时设置单元格的高度。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/2016198c0076d3c831c5ca40c088516b.webp?x-image-process=image/format,png)
65. 接着将标签插入到当前行的下方。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/8bb246fb36dccacb1df3b05f9f34deaf.webp?x-image-process=image/format,png)
66. 继续在该段落中添加一个网址行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/1978fd96b703bcfae24fee811c41ad37.webp?x-image-process=image/format,png)
67. 接着添加验证规则,为非空规则的验证,以及设置在值发生变化时进行表单的验证。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/9a9d2ba3b7e522bfa2a0dc7c96952e2e.webp?x-image-process=image/format,png)
68. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/d9d6e6804abb02f79394b50862639067.webp?x-image-process=image/format,png)
69. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/3d25c3d0fad3de1a918cb457f6e4bdf7.webp?x-image-process=image/format,png)
70. 处理单元格在验证发生变化时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/43521dcb4c1857383dce2faa381eb9fc.webp?x-image-process=image/format,png)
71. 获得当前表单行在表单中的序号。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/95d75deb7f1c612d0933da7c38563908.webp?x-image-process=image/format,png)
72. 然后删除当前段落的错误信息标签。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b5efabfc3b79ab85beb022dae464a4c5.webp?x-image-process=image/format,png)
73. 接着处理验证失败时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0f4bb8b4078fa3445b0126e53a1a4f4c.webp?x-image-process=image/format,png)
74. 对所有的错误信息进行遍历。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/61994f4394bcc466f5def260c25babb0.webp?x-image-process=image/format,png)
75. 创建一个标签表单行,并设置标签的标题文字为错误信息,同时设置单元格的高度。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/9acd601c2e6f00525d3efa68e3a57999.webp?x-image-process=image/format,png)
76. 接着将标签插入到当前行的下方。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/7020958e18da12784423c83b54376765.webp?x-image-process=image/format,png)
77. 继续在该段落中添加一个密码行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b860dfcea092989b92e2410344af784c.webp?x-image-process=image/format,png)
78. 接着添加一个最小长度和最大长度的验证规则。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/67d5a5ae31b73185fc84a0e49493dadb.webp?x-image-process=image/format,png)
79. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/6745e0fd8e20968948aabf9d6711e667.webp?x-image-process=image/format,png)
80. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c1c070f84b723b4060ceebe86ace62e8.webp?x-image-process=image/format,png)
81. 处理单元格在验证发生变化时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/198bcfa33cd26b12829fc83053408e3d.webp?x-image-process=image/format,png)
82. 获得当前表单行在表单中的序号。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/ab39d6b0617c513719e5946d2d07b52f.webp?x-image-process=image/format,png)
83. 然后删除当前段落的错误信息标签。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/ea806a41a36ac5adf12230bdafc686e8.webp?x-image-process=image/format,png)
84. 接着处理验证失败时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0d6a5437c6494ebee777c8c45e949200.webp?x-image-process=image/format,png)
85. 对所有的错误信息进行遍历。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/7533fe741fb7dbdfbe1183dedf68fff2.webp?x-image-process=image/format,png)
86. 创建一个标签行,并设置标签的标题文字为错误信息,同时设置单元格的高度。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c4a2cd6094ef063f90fdb5b80eb3bad3.webp?x-image-process=image/format,png)
87. 接着将标签插入到当前行的下方。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/6f136883b0b232ef1a8657eb89f76040.webp?x-image-process=image/format,png)
88. 继续在该段落中添加一个密码行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/2a9b36d0c551f2a451ace4cf6af06de5.webp?x-image-process=image/format,png)
89. 接着添加一个最小长度和最大长度的验证规则。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/fc6fb55e09afb2a933890d16cc014da0.webp?x-image-process=image/format,png)
90. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/94d5bde9ee425bb2ac969cc814f53819.webp?x-image-process=image/format,png)
91. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/7f8c49016bd2dada152117144a49f948.webp?x-image-process=image/format,png)
92. 处理单元格在验证发生变化时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/f0b900ccdae2a66d30c8e5e9c644179e.webp?x-image-process=image/format,png)
93. 获得当前表单行在表单中的序号。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/34082de6d387240ddec2ce95dfe50436.webp?x-image-process=image/format,png)
94. 然后删除当前段落的错误信息标签。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/56e4d3ce3a37f6fa9404900906c70429.webp?x-image-process=image/format,png)
95. 接着处理当验证失败时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/cb2008b0c0b7cd9083d487289a507df9.webp?x-image-process=image/format,png)
96. 对所有的错误信息进行遍历。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/3f3d107cacbaaf77aedd7b0358b8ff40.webp?x-image-process=image/format,png)
97. 创建一个标签行,并设置标签的标题文字为错误信息,同时设置单元格的高度。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/850c4fe54c3bfdb77190c737f54be115.webp?x-image-process=image/format,png)
98. 接着将标签插入到当前行的下方。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b08b0fb7b244a39ead868a7e8a34a975.webp?x-image-process=image/format,png)
99. 继续在该段落中添加一个整数行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/98e8126bceaeaf8dc613167ad2cf0a58.webp?x-image-process=image/format,png)
100. 接着添加验证规则为,允许用户输入2到999之间的整数。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/4d0c2495ebaa50407d35f140d0f276be.webp?x-image-process=image/format,png)
101. 设置单元格的刷新动作。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0458ef40640ad86d3c2d59878bbc01a3.webp?x-image-process=image/format,png)
102. 当验证失败时,设置单元格的字体颜色为红色。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b3e3ad647058f6b092eaf4ef164f1cda.webp?x-image-process=image/format,png)
103. 处理单元格在验证发生变化时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/91fa0c237add6380feee256dee21a503.webp?x-image-process=image/format,png)
104. 获得当前表单行在表单中的序号。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/54704921809913ae26f065fa95c9e8f8.webp?x-image-process=image/format,png)
105. 然后删除当前段落的错误信息标签。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/6f02e1a694295e8e4cbd8f40c445f80e.webp?x-image-process=image/format,png)
106. 接着处理当验证失败时的情况。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/15c5e7a5524eb6d008cbdec53b4ddd27.webp?x-image-process=image/format,png)
107. 对所有的错误信息进行遍历。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/92316e4386d1486661b7d1c28ff622cb.webp?x-image-process=image/format,png)
108. 创建一个标签行,并设置标签的标题文字为错误信息,同时设置单元格的高度。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/816a1d5a23e545cbe925bf23aa88c02e.webp?x-image-process=image/format,png)
109. 接着将标签插入到当前行的下方。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/b55653d6906965c8831f8c8722f3672f.webp?x-image-process=image/format,png)
110. 添加一个新的段落。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/e554249207700ea41a113187b2b6cde6.webp?x-image-process=image/format,png)
111. 然后在段落中添加一个按钮行,并设置该行的标题文字。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/2504e822ff67511cacb9c27e90b058be.webp?x-image-process=image/format,png)
112. 设置当表单行处于选择状态时,强制校验表单中的所有元素。接着点击左上角的[编译并运行]按钮,启动模拟器预览项目。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/076d0346fa64a06afa5addaf2124c5ad.webp?x-image-process=image/format,png)
113. 在弹出的项目中,点击密码行,并打开系统键盘。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/63b993733cf2c64277116ce06c308e36.webp?x-image-process=image/format,png)
114. 在键盘上点击字符,在密码行中输入内容。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/8ea13a303ba35f2211691cd2faade120.webp?x-image-process=image/format,png)
115. 然后点击完成按钮,完成内容的输入。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/757340c701672ac9c5c705a7ac8d35e4.webp?x-image-process=image/format,png)
116. 此时表单校验失败,字体变为红色,再次点击密码文本框。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/ded7b87bcd9a6270ea8d7d689fbf5996.webp?x-image-process=image/format,png)
117. 然后通过键盘再次输入内容,这次输入更多的字符。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/73b89897ff7dcdcc8e66410de35ecccb.webp?x-image-process=image/format,png)
118. 接着继续点击多次按键,输入更多的字符。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/cf31f8162122dda9327602a5968fd794.webp?x-image-process=image/format,png)
119.
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c9112a0dcc9cf54ba238dc96c50c7be2.webp?x-image-process=image/format,png)
120.
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/d074a4a2dd699512e3653f856bb2d25d.webp?x-image-process=image/format,png)
121. 当输入一定长度的内容之后,点击完成按钮。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/40d545ec5391c87d844ffd501a77c4e0.webp?x-image-process=image/format,png)
122. 此时表单检验成功,红色文字消失。接着在下方的圆点处按下手指,并向上方拖动,查看下方的表单。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/5bfaf6369a965a53318ac68132df7292.webp?x-image-process=image/format,png)
123. 接着点击具有非空验证规则的表单行,测试非空的验证规则。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/db0a48ddec74bc8af533092062e996be.webp?x-image-process=image/format,png)
124. 直接点击键盘上的完成按钮,观察表单的验证效果。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/1e19d5d614da2aeaf6322be0d7840297.webp?x-image-process=image/format,png)
125. 表单验证失败,并在表单行的下方,插入了一个标签行,用来显示错误信息。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/c36b08d385666e48c750fc92d7800475.webp?x-image-process=image/format,png)
126. 接着点击键盘上的按键,输入一个字符。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/90287b95596af09c29ce95716352e127.webp?x-image-process=image/format,png)
127. 此时,表单实时验证成功,错误标签被删除。再次点击键盘上的完成按钮,关闭键盘。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/0379f084ec4f4cd34d60fabe8667bd8c.webp?x-image-process=image/format,png)
128. 点击底部的按钮,可以检验表单中的所有元素。
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/a7459474a3a21185b00ee95cdca07f3c.webp?x-image-process=image/format,png)
![iOS开发中的神兵利器](https://i-blog.csdnimg.cn/blog_migrate/a853bccc734fe68b2185333b245c2e29.webp?x-image-process=image/format,png)
本文整理自:《app开发中的神兵利器》,真正的[手把手]教学模式,用最快的速度上手iOS开发,苹果商店App Store免费下载:https://itunes.apple.com/cn/app/id1209739676,或扫描本页底部的二维码。课程配套素材下载地址:资料下载