[Swift通天遁地]二、表格表单,10快速添加日期选择/多选/动作表单/地图等自定义表单

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)

➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/

➤GitHub地址:https://github.com/strengthen/LeetCode

➤原文地址:

➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。

➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]通天遁地Swift

本文将演示创建一个更加强大的表单。

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 }