UITextField代表“shouldChangeCharactersIn”不用于文本字段中的第一项
问题描述:
我正在构建一个接受4位OTP的视图。我的代码如下所示UITextField代表“shouldChangeCharactersIn”不用于文本字段中的第一项
“的代码文本”是的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”委托方法,但当文本字段获得它的第二个条目时调用委托并且键盘正在被解雇。
因此,为了让键盘解散不必要的击键是必要的。
任何建议将是有益的
答
替代选择,搭配出编码
- Cretae IBAction
- Ctrl-Click(或右键点击)界面生成器中的UITextField
- 将“Editing Changed”事件连接到第一步中添加的文件所有者的IBAction。
为例如,您的UIControlEventEditingChanged
方法名称为updateContentsOfTextField
,并得到输出
func updateContentsOfTextField(_ theTextField: UITextField) {
print("text changed: \(theTextField.text)")
}
你可以从here
答
请使用通知
尝试的string.length>0
代替
textField.text!.characters.count >= 1
编辑
我已经成功,当用户输入一个字符,以获得回调textfield
// in your respective method where you init your text field
[_txtSearchLocation addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange :(UITextField *) textField{
}
当这m ethod得叫你可以调用textField.resignFirstResponder
对不起的OBJ-C,我复制这从我当前打开的文件THX
捕获文本字段的所有事件
你为什么不与'编辑Changed'尝试更多信息而不是'shouldChangeCharactersIn' –