【发布时间】:2022-01-03 00:07:57
【问题描述】:
我有一个文本字段,它调用一种方法,以按你输入的方式将输入格式化为百分比。
cell.textField.addTarget(self, action: #selector(textChangedIntoPercent(sender:)), for: .editingChanged)
调用的方法:
@objc func textChangedIntoPercent (sender : UITextField) {
if let amountString = sender.text?.percentInputFormatting() {
sender.text = amountString
}
}
以下代码在输入带有尾随 % 符号的数字时效果很好。但是,当使用退格时,不会删除任何内容,字符串只是返回自身,最后一个数字不退格。如果我将光标的位置更改为就在百分号之前,我可以删除数字。
func percentInputFormatting() -> String {
var number: NSNumber!
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
var amountWithPrefix = self
let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.count), withTemplate: "")
let double = (amountWithPrefix as NSString).doubleValue
number = NSNumber(value: (double / 100))
guard number != 0 as NSNumber else {
return "0%"
}
return "\(formatter.string(from: number)!)" + "%"
}
【问题讨论】:
-
你想要发生什么?允许用户用退格键删除百分号?这是否与您自动添加百分号的意图相矛盾...?
-
我很抱歉造成混乱。不,我不希望 % 符号永远能够被删除,但我希望用户能够在百分号之前退格数字。这有意义吗?
-
哦,好吧,我明白你的意思了。
标签: ios swift string uitextfield percentage