我希望数字为12,345,678,因此当我在文本字段中键入内容时就会显示出来。文本字段的最大输入值为8位数字。
我使用以下代码,但输入7位数字后无法清除数字。
我该如何解决?
override func viewDidLoad() {
myTextfield.delegate = self
self.myTextfield.keyboardType = .numberPad
myTextfield.addTarget(self, action:#selector(textFieldValDidChange), for: .editingChanged)
}
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return range.location < 8
}
@objc func textFieldValDidChange(_ textField: UITextField) {
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
if textField.text!.count >= 1 {
let number = Double(textField.text!.replacingOccurrences(of: ",", with: ""))
let result = formatter.string(from: NSNumber(value: number!))
textField.text = result!
}
}
答案 0 :(得分:1)
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return range.location < 10
}
8位数字加上2个逗号,即10个字符(最后一个索引为9)。
答案 1 :(得分:1)
当有7位数字和两个逗号,并且光标位于末尾时,range.location
将为9。所以使用:
return range.location <= 9
这将允许8位数字和两个逗号。
但是即使那样,您的支票还是不够。用户可以将光标移动到数字的开头,然后再输入几个数字。因此,仅检查光标的位置是不够的。您要检查结果字符串的长度。
您的代码也不会竭力阻止输入非数字文本。用户可以复制和粘贴,用户可以使用外部键盘。在iPad上,.numberPad
键盘仍显示正常的完整键盘。永远不要依赖分配的键盘。
摘要-更新shouldChangeCharactersIn
以确保仅输入数字,并查看字符串的最终长度是多少,光标位置无关。