如何在iOS中将文本字段分隔为数字格式的逗号?

时间:2018-12-03 17:45:17

标签: ios swift uitextfield

我希望数字为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!
    }
}

2 个答案:

答案 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以确保仅输入数字,并查看字符串的最终长度是多少,光标位置无关。