【问题标题】:How to edit or update the text inside the Text Field in Swift?如何在 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 内的文本(不是占位符)。

我该怎么办?

【问题讨论】:

    标签: ios swift uitextfield


    【解决方案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)!
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-03
        • 1970-01-01
        相关资源
        最近更新 更多