阻止一些数字键盘的数字,使其适应用户输入。

时间:2016-08-17 07:05:12

标签: ios swift uikeyboard numpad

我的应用程序要求用户使用数字键盘键盘输入精确的分钟数。我想为用户输入的第一个数字阻止键盘的数字> 5(这样他们就不能输入分钟数> 59)。对于第二个数字,我希望它解锁先前被阻止的数字,以便可以精确地插入分钟(例如18或59)。有没有办法做到这一点?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

您应该使用 textField(_:shouldChangeCharactersIn:replacementString:)中的UITextFieldDelegate

以下是您可以做的工作示例:

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

        var startString =  NSString()
        if textField.text != nil {
            startString = textField.text! as NSString
        }

        let endString = startString.stringByReplacingCharactersInRange(range, withString: string)

         if endString.isEmpty == true {
            return true
         }


        let intValue = Int(endString)
        if intValue >= 0 && intValue < 60 {
            return true
        }

        return false
    }

在这种情况下,它将允许0(包括)和60(不包括)之间的每个整数值。

编辑: 这个方法由它的委托上的UITextField调用(如果你不理解什么是委托,花点时间阅读thisthis,这个模式非常重要)。

因此,要使上述方法有效,您只需要向UITextField说明您的UIViewController是其代理人。您可以在代码(例如viewDidLoad)或 Interface Builder 中执行此操作。这是一个完整的例子:

class MyViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

        var startString = NSString()
        if textField.text != nil {
            startString = textField.text! as NSString
        }

        let endString = startString.stringByReplacingCharactersInRange(range, withString: string)

         if endString.isEmpty == true {
            return true
         }    

        let intValue = Int(endString)
        if intValue >= 0 && intValue < 60 {
            return true
        }

        return false
    }
}