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

Posted

技术标签:

【中文标题】如何在 Swift 中编辑或更新文本字段中的文本?【英文标题】:How to edit or update the text inside the Text Field in Swift? 【发布时间】:2018-04-25 06:11:05 【问题描述】:

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

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

我想将 Textfield 内的文本从 "25000000" 编辑到 "25.000.000",我可以使用一个函数给出点 (.) 分隔符,比如说 formattedWithSeparator(),它可以用于这样的 Int:

25000.formattedWithSeparator()

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

我该怎么办?

【问题讨论】:

【参考方案1】:

我想你有一个方法是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
    

【讨论】:

【参考方案2】:

试试这个:

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

【讨论】:

以上是关于如何在 Swift 中编辑或更新文本字段中的文本?的主要内容,如果未能解决你的问题,请参考以下文章

swift 4:我的场景中的文本字段都不可编辑

如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift

如何创建一个在 XCTest 中定义按钮或文本字段的 swift 文件?

如何在 swift 4 中的另一个表视图控制器中获取该表视图单元格中的文本字段文本?

快速点击按钮时添加行或文本字段

如何使用 SWIFT 修改文档或 PDF 中的选定字段