1

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

4

1 回答 1

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,这个模式非常重要)。

因此,要使上述方法有效,您只需对您说UITextFieldUIViewController是它的代表。您可以在代码(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
    }
}
于 2016-08-17T07:23:05.893 回答