我有这段代码,来自GitHub和一些StackOverflow帖子
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)!
}
}
我使用此扩展程序可以在用户输入时在UI文本字段中动态创建货币格式。 它工作正常,但我无法删除我写的内容。 我必须手动将光标拖动到我想要删除的位置,否则它将无法工作。 为什么会这样?
答案 0 :(得分:0)
我试图以这种方式添加监听器
textfield.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
以这种方式运行你的功能
func textFieldDidChange(_ textField: UITextField) {
let cur = textField.text!.currencyInputFormatting()
textField.text = cur
}
一切正常。我可以从最后删除我的输入,只要我有一个数字,格式化仍然会开始。因此,在textField上设置文本操作后,光标将自动移动到字符串的末尾,因此您只能从末尾删除字符。如果要删除任何其他字符,只需在编辑笔记本中的文本时拖动光标即可。