【问题标题】:How to customize numeric input for a UITextField?如何自定义 UITextField 的数字输入?
【发布时间】:2015-01-24 02:50:23
【问题描述】:

我的故事板中有一个UITextField(代表小费),开头为$0.00。如果用户键入8,我希望文本字段读取$0.08。如果用户随后键入3,我希望文本字段读取$0.83。如果用户随后键入5,我希望文本字段读取$8.35。我将如何以这种方式将输入更改为UITextField

【问题讨论】:

  • 为什么这个问题看起来和一个小时前问的question一样?
  • 因为我正在回答那个用户的问题,并且正要发布它,但他们被吓倒并删除了他们的问题。
  • 在我看来,他们的问题很清楚。如果您不这么认为,我很抱歉,但我讨厌看到新用户受到威胁而不是温和引导。
  • SO 是关于帮助编写代码的,应该尝试一下,这就是学习的方式。

标签: ios swift uitextfield


【解决方案1】:

您可以通过以下四个步骤来做到这一点:

  1. 通过将您的 viewController 添加到 class 定义中,使您的 viewController 成为 UITextFieldDelegate
  2. 通过 ControlIBOutlet 添加到您的文本字段 - 从情节提要中的 UITextField 拖动到您的代码。叫它myTextField
  3. viewDidLoad() 中,将您的viewController 设置为textField 的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 = "$0.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
        }
    }
    

【讨论】:

  • 当我按退格键或删除键时它不起作用。此外,如果我清除文本字段,那么它仍然会从最后一点开始,除非我将提示重置为零。
猜你喜欢
  • 1970-01-01
  • 2016-12-01
  • 2012-04-23
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多