如何自定义 UITextField 的数字输入?

How to customize numeric input for a UITextField?

我的 Storyboard 中有一个 UITextField(表示小费值),开头为 [=11=].00。如果用户键入 8,我希望文本字段显示为 [=13=].08。如果用户随后键入 3,我希望文本字段显示为 [=15=].83。如果用户随后键入 5,我希望文本字段显示为 .35。我将如何以这种方式将输入更改为 UITextField

您可以通过以下四个步骤完成此操作:

  1. 通过将 viewController 添加到 class 定义中,使您的 viewController 成为 UITextFieldDelegate
  2. 通过 ControlIBOutlet 添加到您的 textField - 从故事板中的 UITextField 拖动到您的代码。称之为 myTextField.
  3. viewDidLoad() 中,将您的 viewController 设置为文本字段的 delegate
  4. 实施textField:shouldChangeCharactersInRange:replacementString:。 获取传入字符并将其添加到提示中,然后使用 String(format:) 构造函数来格式化您的字符串。

    import UIKit
    
    class ViewController: UIViewController, UITextFieldDelegate {
    
        @IBOutlet weak var myTextField: UITextField!
    
        // Tip value in cents
        var tip: Int = 0
    
        override func viewDidLoad() {
            super.viewDidLoad()
            myTextField.delegate = self
            myTextField.text = "[=10=].00"
        }
    
        func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
            if let digit = Int(string) {
                tip = tip * 10 + digit
                textField.text = String(format:"$%d.%02d", tip/100, tip%100)
            }
            return false
        }
    }