我的应用程序要求用户使用数字键盘键盘输入精确的分钟数。我想为用户输入的第一个数字阻止键盘的数字> 5(这样他们就不能输入分钟数> 59)。对于第二个数字,我希望它解锁先前被阻止的数字,以便可以精确地插入分钟(例如18或59)。有没有办法做到这一点?如果是这样,怎么样?
答案 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
调用(如果你不理解什么是委托,花点时间阅读this和this,这个模式非常重要)。
因此,要使上述方法有效,您只需要向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
}
}