[Swift通天遁地]二、表格表单-(15)自定义表单文本框内容的格式
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10202354.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
本文将演示如何设置表单中的输入内容的格式。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
现在开始编写代码,实现设置表单中的输入内容的格式。
1 import UIKit 2 //首先在当前类文件中, 3 //引入以及安装的第三方类库 4 import Eureka 5 6 //创建一个货币类,该类继承自数学格式类,并遵循格式化协议。 7 class CurrencyFormatter : NumberFormatter, FormatterProtocol 8 { 9 //添加一个方法,当处理对象是数字时,则设置其小数点的位置。 10 override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, range rangep: UnsafeMutablePointer<NSRange>?) throws 11 { 12 //如果设置对象为空,则不再执行后面的代码 13 guard obj != nil else { return } 14 //将字符串按小数点进行分割,并重新拼接成一个新的字符串。 15 let str = string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "") 16 //根据小数点的位数,设置对象的数据。 17 obj?.pointee = NSNumber(value: (Double(str) ?? 0.0)/Double(pow(10.0, Double(minimumFractionDigits)))) 18 } 19 20 //添加一个协议中的方法,用来获得当输入新字符时的字符输入位置 21 func getNewPosition(forPosition position: UITextPosition, inTextInput textInput: UITextInput, oldValue: String?, newValue: String?) -> UITextPosition 22 { 23 //根据原位置和偏移距离,计算并返回新的位置。 24 return textInput.position(from: position, 25 offset:((newValue?.characters.count ?? 0) - (oldValue?.characters.count ?? 0))) ?? position 26 } 27 } 28 29 //修改当前视图控制器类的父类的名称 30 class ViewController: FormViewController { 31 32 override func viewDidLoad() { 33 super.viewDidLoad() 34 35 //在表单中添加一个新的段落,并设置段落的标题 36 form +++ Section("Number formatters") 37 //添加一个数字行 38 <<< DecimalRow() 39 { 40 //设置用户在输入时,实时设置数字的格式 41 $0.useFormatterDuringInput = true 42 //设置本行的标题文字 43 $0.title = "Currency style" 44 //设置本行的默认值 45 $0.value = 2017 46 //初始化一个货币格式对象 47 let formatter = CurrencyFormatter() 48 //根据设备的地区,使用不同的货币符号 49 formatter.locale = .current 50 //设置本行的数字为货币格式 51 formatter.numberStyle = .currency 52 //设置用来格式化本行数据的对象 53 $0.formatter = formatter 54 } 55 //添加一个数字行 56 <<< DecimalRow() 57 { 58 //设置本行的标题文字 59 $0.title = "Scientific style" 60 //设置本行的默认值 61 $0.value = 2017 62 //初始化一个数字格式对象 63 let formatter = NumberFormatter() 64 //设置格式对象的本地化属性 65 formatter.locale = .current 66 //设置本行的数字为科学计数法 67 formatter.numberStyle = .scientific 68 //将这种格式应用在当前的表单行 69 $0.formatter = formatter 70 } 71 //添加一个整数行 72 <<< IntRow() 73 { 74 //设置本行的标题文字 75 $0.title = "Spell out style" 76 //设置本行的默认值 77 $0.value = 2017 78 //初始化一个数字格式对象 79 let formatter = NumberFormatter() 80 //设置格式对象的本地化属性 81 formatter.locale = .current 82 //设置格式对象的数字样式 83 formatter.numberStyle = .spellOut 84 //将这种格式应用在当前的表单行 85 $0.formatter = formatter 86 } 87 88 //添加一个段落,用来添加日期格式的表单的表单行 89 +++ Section("Date formatters") 90 //在段落中添加一个日期行 91 <<< DateRow() 92 { 93 //设置本行的标题文字 94 $0.title = "Short style" 95 //设置本行的默认值 96 $0.value = Date() 97 //初始化一个日期格式对象 98 let formatter = DateFormatter() 99 //设置格式对象的本地化属性 100 formatter.locale = .current 101 //设置格式对象为短日期样式 102 formatter.dateStyle = .short 103 //将这种格式应用在当前的表单行 104 $0.dateFormatter = formatter 105 } 106 //在段落中添加一个日期行 107 <<< DateRow() 108 { 109 //设置本行的标题文字 110 $0.title = "Long style" 111 //设置本行的默认值 112 $0.value = Date() 113 //初始化一个日期格式对象 114 let formatter = DateFormatter() 115 //设置格式对象的本地化属性 116 formatter.locale = .current 117 //设置格式对象为长日期样式 118 formatter.dateStyle = .long 119 //将这种格式应用在当前的表单行 120 $0.dateFormatter = formatter 121 } 122 //添加一个段落,用来添加其他格式的表单行 123 +++ Section("Other formatters") 124 //添加一个数字表单行 125 <<< DecimalRow() 126 { 127 //设置本行的标题文字 128 $0.title = "Energy: Jules to calories" 129 //设置本行的默认值 130 $0.value = 100.0 131 //初始化一个能量格式对象 132 let formatter = EnergyFormatter() 133 //将这种格式应用在当前的表单行 134 $0.formatter = formatter 135 } 136 //添加一个整数行 137 <<< IntRow() 138 { 139 //设置本行的标题文字 140 $0.title = "Weight: Kg to lb" 141 //设置本行的默认值 142 $0.value = 1000 143 //初始化一个重量格式对象, 144 //将这种格式应用在当前的表单行 145 $0.formatter = MassFormatter() 146 } 147 } 148 149 override func didReceiveMemoryWarning() { 150 super.didReceiveMemoryWarning() 151 // Dispose of any resources that can be recreated. 152 } 153 }