【问题标题】:How to edit or update the text inside the Text Field in Swift?如何在 Swift 中编辑或更新文本字段中的文本?
【发布时间】:2018-04-25 06:11:05
【问题描述】:
这是此屏幕的 .gif:http://g.recordit.co/73jHPP5LE6.gif
如上图所示,有一个 UILabel Rp "25.000.000" 和 TextField "25000000" 内的文本(在用户填写文本字段后)。两者其实都是一种货币。
我想将 Textfield 内的文本从 "25000000" 编辑到 "25.000.000",我可以使用一个函数给出点 (.) 分隔符,比如说 formattedWithSeparator(),它可以用于这样的 Int:
25000.formattedWithSeparator()
但我不知道我必须在哪里实现该功能如果我想在用户更新/写入文本字段时实时编辑/更新 TextField 内的文本(不是占位符)。
我该怎么办?
【问题讨论】:
标签:
ios
swift
uitextfield
【解决方案1】:
我想你有一个方法是IBAction 用于控制事件editingChanged,对吧?
@IBAction func textChanged() {
...
}
在此方法中,您可以更改文本字段的文本:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
// set other properties of the formatter e.g. locale if you want
// remove the grouping separators (the dots) first, then convert to Int
if let amount = Int(tfAmount.text?.replacingOccurrences(of: formatter.groupingSeparator, with: "") ?? "") {
if let formatted = formatter.string(from: NSNumber(value: amount)) {
yourTextField.text = formatted
}
}
【解决方案2】:
试试这个:
override func viewDidLoad() {
super.viewDidLoad()
textField.addTarget(self, action: #selector(myTextFieldDidChange), for: .editingChanged)
}
func myTextFieldDidChange(_ textField: UITextField) {
if let amountString = textField.text?.currencyInputFormatting() {
textField.text = amountString
}
}
extension String {
// formatting text for currency textField
func currencyInputFormatting() -> String {
var number: NSNumber!
let formatter = NumberFormatter()
formatter.numberStyle = .currencyAccounting
formatter.currencySymbol = "$"
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
var amountWithPrefix = self
// remove from String: "$", ".", ","
let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")
let double = (amountWithPrefix as NSString).doubleValue
number = NSNumber(value: (double / 100))
// if first number is 0 or all numbers were deleted
guard number != 0 as NSNumber else {
return ""
}
return formatter.string(from: number)!
}
}