如何使用shouldChangeCharactersInRange连续格式化数字

时间:2017-07-04 00:21:48

标签: swift uitextfield uitextfielddelegate

我有一个UITextField验证,用于转换用户的数字输入。例如,如果用户输入1,则变为0.01。如果用户键入12,则变为0.12。

当我在textFieldDidEndEditing中有验证码时,我的代码工作正常。但是,我被要求稍微重写代码,以便在用户输入时进行验证,而不是在完成文本字段时进行验证,因此使用shouldChangeCharactersInRange是有意义的。但是,我现在有点困惑如何编写我的代码。

旧代码(工作):

func textFieldDidEndEditing(_ textField: UITextField) {
    if var text = textField.text,
    let float = Float(text) {
        let formattedFloat = float/100
        if let formatterExists = formatter {
            text = String.localizedStringWithFormat("\(String(describing: formatterExists))", formattedFloat)
        }
        let numericString = text.replacingOccurrences(of: ",", with: "")
        cellModel.stringInput = numericString
    }
}

新代码(不工作):

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if let float = Float(string) {
            let formattedFloat = float/100
            var text = string
            if let formatterExists = formatter {
                text = String.localizedStringWithFormat("\(String(describing: formatterExists))", formattedFloat)
            }
            let numericString = text.replacingOccurrences(of: ",", with: "")
            print(numericString)
            textField.text = text
            cellModel.stringInput = numericString
        }
        return false
    }

我知道在我的shouldChangeCharactersInRange代码中,每当我输入一个字符时,它都会使用该字符并应用验证,并且仅对单个字符执行此操作(如果我输入1,我会得到一个0.01,如果我键入2,则前一个字符被替换,我得到0.02)。

我想知道用户能够连续输入数字并在用户输入时继续应用验证的好方法。

谢谢!

0 个答案:

没有答案