[Swift通天遁地]二、表格表单-(15)自定义表单文本框内容的格式

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10202354.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

本文将演示如何设置表单中的输入内容的格式。

在项目导航区,打开视图控制器的代码文件【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 }
原文地址:https://www.cnblogs.com/strengthen/p/10202354.html