我的应用程序会询问用户她/他使用数字键盘插入的精确分钟数。对于用户输入的第一个数字,我想阻止键盘的数字 >5(这样他们就不能输入 > 59 的分钟数)。对于第二个号码,我希望它可以解锁先前被阻止的号码,以便可以精确插入分钟(例如 18 或 59)。有没有办法做到这一点?如果是这样,怎么做?
问问题
55 次
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
它的委托调用(如果你不明白什么是委托,花一些时间阅读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
}
}
于 2016-08-17T07:23:05.893 回答