如何编辑或更新Swift中文本字段内的文本?

时间:2018-04-25 06:11:06

标签: ios swift uitextfield

Screenshot

以下是此屏幕的.gif文件:http://g.recordit.co/73jHPP5LE6.gif

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

我想编辑Textfield中从"25000000""25.000.000"的文本,我可以使用函数给点(。)分隔符,让我们说formattedWithSeparator()可以用于像这样的Int:

25000.formattedWithSeparator()

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

我该怎么办?

2 个答案:

答案 0 :(得分:0)

我想你的控制事件IBAction的方法是editingChanged,对吧?

@IBAction func textChanged() {
    ...
}

在此方法中,您可以更改文字字段的文字:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
// set other properties of the formatter e.g. locale if you want

// remove the grouping separators (the dots) first, then convert to Int
if let amount = Int(tfAmount.text?.replacingOccurrences(of: formatter.groupingSeparator, with: "") ?? "") {
    if let formatted = formatter.string(from: NSNumber(value: amount)) {
        yourTextField.text = formatted
    }
}

答案 1 :(得分:0)

试试这个:

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