UITextField中的动态货币 - Swift 3

时间:2017-06-20 14:38:11

标签: swift xcode formatter

我有这段代码,来自GitHub和一些StackOverflow帖子

extension String {

    // formatting text for currency textField
    func currencyInputFormatting() -> String {

        var number: NSNumber!
        let formatter = NumberFormatter()
        formatter.numberStyle = .currencyAccounting
        formatter.currencySymbol = "$"
        formatter.maximumFractionDigits = 2
        formatter.minimumFractionDigits = 2

        var amountWithPrefix = self

        // remove from String: "$", ".", ","
        let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
        amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")

        let double = (amountWithPrefix as NSString).doubleValue
        number = NSNumber(value: (double / 100))

        // if first number is 0 or all numbers were deleted
        guard number != 0 as NSNumber else {
            return ""
        }

        return formatter.string(from: number)!
    }
}

我使用此扩展程序可以在用户输入时在UI文本字段中动态创建货币格式。 它工作正常,但我无法删除我写的内容。 我必须手动将光标拖动到我想要删除的位置,否则它将无法工作。 为什么会这样?

1 个答案:

答案 0 :(得分:0)

我试图以这种方式添加监听器

textfield.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

以这种方式运行你的功能

func textFieldDidChange(_ textField: UITextField) {
    let cur = textField.text!.currencyInputFormatting()
    textField.text = cur
}

一切正常。我可以从最后删除我的输入,只要我有一个数字,格式化仍然会开始。因此,在textField上设置文本操作后,光标将自动移动到字符串的末尾,因此您只能从末尾删除字符。如果要删除任何其他字符,只需在编辑笔记本中的文本时拖动光标即可。