我已根据SO的其他一些答案粗略地整理了这些代码,但我仍然无法使其工作。我希望我的光标在达到一定长度后移动到下一个textField
,并且它在某种程度上做到了......
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.tag == 0 && range.location >= 1) {
[_secondTextField becomeFirstResponder];
return YES;
} else if (textField.tag == 1 && range.location >= 2) {
[_thirdTextField becomeFirstResponder];
return YES;
} else if (textField.tag == 2 && range.location >= 1) {
[_fourthTextField becomeFirstResponder];
return YES;
} else {
return YES;
}
}
...
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// catched the delegates for the input textfields
_firstTextField.delegate = self;
_secondTextField.delegate = self;
_thirdTextField.delegate = self;
[_firstTextField becomeFirstResponder];
}
所以我有4个文本字段,前三个文本字段的字符数限制为1,2和1。现在的问题是光标不会移动到下一个文本字段,直到之后我输入更多文本。下一个文本位于新文本字段中,因此实现了整体效果,但光标在正确的时间没有移动。
我可以做什么,一旦达到字符限制,光标就会移动?
答案 0 :(得分:1)
更好的方法是使用didChange
方法,例如UITextViewDelegate
方法,但我们知道UITextFieldDelegate
没有didChange
方法。您可以手动添加行为。您可以使用shouldChangeCharactersInRange:
方法,但我个人建议您不要覆盖方法,除非您绝对不得不这样做。
您可以使用以下方式添加行为:
[yourTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
在目标方法中:
- (void)textFieldDidChange:(UITextField*)textField{
if (textField.tag == 0 && textField.text.length == 1){
[_secondTextField becomeFirstResponder];
}else if (textField.tag == 1 && textField.text.length == 2){
[_thirdTextField becomeFirstResponder];
}else if (textField.tag == 2 && textField.text.length == 1){
[_fourthTextField becomeFirstResponder];
}
}