【发布时间】:2017-04-01 12:55:24
【问题描述】:
我正在构建一个接受 4 位 OTP 的视图。我的代码如下
“CodeText”是 UITextField 的子类
class RegisterController: ModelController, UITextFieldDelegate {
@IBOutlet var firstDigit:CodeText?
@IBOutlet var secondDigit:CodeText?
@IBOutlet var thirdDigit:CodeText?
@IBOutlet var fourthDigit:CodeText?
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
self.firstDigit!.delegate = self
self.secondDigit!.delegate = self
self.thirdDigit!.delegate = self
self.fourthDigit!.delegate = self
self.firstDigit!.becomeFirstResponder()
}
// UITextField Delegate Methods
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if (textField == self.firstDigit) {
if(textField.text!.characters.count >= 1 ) {
self.secondDigit?.becomeFirstResponder()
}
}
else if (textField == secondDigit) {
if(textField.text!.characters.count >= 1 ) {
self.thirdDigit?.becomeFirstResponder()
}
}
else if (textField == thirdDigit) {
if(textField.text!.characters.count >= 1 ) {
self.fourthDigit?.becomeFirstResponder()
}
}
else if (textField == fourthDigit) {
print("Fourth Digit")
if(textField.text!.characters.count >= 1 ) {
self.fourthDigit?.resignFirstResponder()
}
}
return true
}
}
上面的代码对我来说很好,除了一个功能。我希望在输入第四位数字后关闭键盘,但是发生的情况是当“fourthDigit”获得焦点并获得它的第一个条目时不调用“shouldChange”委托方法,但是当文本字段获得它的第二个条目时调用委托并且键盘被关闭了。
因此,为了消除键盘,需要进行不必要的击键。
任何建议都会有所帮助
【问题讨论】:
-
为什么不尝试使用
Editing Changed而不是shouldChangeCharactersIn
标签: ios swift swift3 uitextfield uitextfielddelegate