swift UITextField加倍最后一个字符

时间:2016-09-23 01:30:29

标签: ios swift

我将UITextField子类化为创建货币文本字段。文本字段自动格式化在输入时输入货币的数字。我已经解决了一个问题。无论出于何种原因,最后输入的数字都会加倍。比方说,我想输入$ 56.78,所以我键入5678,但输出最终为$ 56.788。

我已将所有可能的场景打印到控制台,并在那里打印正确的版本(在本例中为56.78)。我已经缩小了它,我相信formatCurrency函数,但我无法弄清楚我的生活是怎么回事。以下是相关代码:

class CurrencyTextField: UITextField, UITextFieldDelegate {

    private var currencyString = String()

    func textFieldDidBeginEditing(_ textField: UITextField) {

        // Clear out the current string when the user starts editing the field
        //currencyString = ""
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        switch string {
        case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
            currencyString += string
            self.text = formatCurrency(currencyString)
            return true
        default:
            return false
        }

    }

    func textFieldShouldClear(_ textField: UITextField) -> Bool {

        // Clear the current string if the user clicks the clear button
         currencyString = ""
        return true
    }

    private func formatCurrency(_ string: String) -> String {
        let numberToFormat = Double(string)! / 100

        let formatter = NumberFormatter()
        formatter.numberStyle = .currency

        if let stringToReturn = formatter.string(from: NSNumber(value: numberToFormat)) {
            return stringToReturn
        } else {
            return "$0.00"
        }
    }
}

任何见解都将受到高度赞赏!我使用了非常相似的代码而没有子类化,并且没有任何问题。此外,如果我绕过格式并只使用一个直号,它也可以。

BONUS如果您对为什么使用相同的代码,数字键盘上的退格键不起作用有任何想法。

编辑:这不是一个重复的标记,因为它被称为复制的情况显示了如何做我已经在做的事情,它甚至没有提到我遇到的问题。

0 个答案:

没有答案