首页 > 解决方案 > 如何在 Swift 中编辑或更新文本字段中的文本?

问题描述

截屏

这是此屏幕的 .gif:http: //g.recordit.co/73jHPP5LE6.gif

如上图所示,"25.000.000"TextField 中有一个 UILabel Rp 和一个文本"25000000"(在用户填写文本字段后)。它们实际上都是一种货币。

"25000000"我想从to编辑 Textfield 中的文本"25.000.000",我可以使用函数给出点 (.) 分隔符,假设formattedWithSeparator()它可以用于这样的 Int:

25000.formattedWithSeparator()

但我不知道我必须在哪里实现该功能如果我想在用户更新/写入文本字段时编辑/更新 TextField 内的文本(不是占位符)。

我应该怎么办?

标签: iosswiftuitextfield

解决方案


尝试这个:

override func viewDidLoad() {
    super.viewDidLoad()

    textField.addTarget(self, action: #selector(myTextFieldDidChange), for: .editingChanged)
}

func myTextFieldDidChange(_ textField: UITextField) {

    if let amountString = textField.text?.currencyInputFormatting() {
        textField.text = amountString
    }
}

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)!
    }
}

推荐阅读