阻止一些数字键盘的数字,使其适应用户输入。
Blocking some of number pad's numbers so that it is adapted to the user input.
我的应用要求用户输入精确的分钟数,she/he 使用数字键盘输入该分钟数。对于用户键入的第一个数字,我想阻止键盘的数字 > 5(这样他们就不能键入大于 59 的分钟数)。对于第二个号码,我希望它能取消阻止之前被阻止的号码,以便可以精确插入分钟(例如 18 或 59)。有没有办法做到这一点?如果是,怎么做?
你应该和
textField(_:shouldChangeCharactersIn:replacementString:)
from the 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 and 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
}
}
我的应用要求用户输入精确的分钟数,she/he 使用数字键盘输入该分钟数。对于用户键入的第一个数字,我想阻止键盘的数字 > 5(这样他们就不能键入大于 59 的分钟数)。对于第二个号码,我希望它能取消阻止之前被阻止的号码,以便可以精确插入分钟(例如 18 或 59)。有没有办法做到这一点?如果是,怎么做?
你应该和
textField(_:shouldChangeCharactersIn:replacementString:)
from the 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 and 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
}
}