以下是此屏幕的.gif文件:http://g.recordit.co/73jHPP5LE6.gif
如上图所示,有一个UILabel Rp "25.000.000"
和TextField "25000000"
内的文本(用户填写文本字段后)。它们都是货币。
我想编辑Textfield中从"25000000"
到"25.000.000"
的文本,我可以使用函数给点(。)分隔符,让我们说formattedWithSeparator()
可以用于像这样的Int:
25000.formattedWithSeparator()
但我不知道在哪里实现该功能如果我想在文本字段中用户更新/写入时编辑/更新TextField live中的文本(而不是占位符)。
我该怎么办?
答案 0 :(得分:0)
我想你的控制事件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
}
}
答案 1 :(得分:0)
试试这个:
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)!
}
}