uiresponder next textfield becomeFirstResponder after keyEvent
-
14-06-2021 - |
質問
I have 4 text fields horizontally. Each textFiled will allow only four characters. If user enters four characters focus should be changed to next text field with out any user interaction. By using below code,i am able to switch to next textFiled, but only after typing any character from the keyboard. My requirement is to get auto focus on next filed after entering four characters. Please help me in this. Thanks in Advance.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if ( range.location >= 4 ) {
textField.text = string;
UIResponder* nextResponder = [textField.superview viewWithTag:(textField.tag + 1)];
if (nextResponder) {
[textField resignFirstResponder];
[nextResponder becomeFirstResponder];
}
return NO;
}
return YES;
}
解決
//try to this code
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([[textField text] length] + [string length] - range.length > 4) {
textField.text = string;
UIResponder* nextResponder = [textField.superview viewWithTag:(textField.tag + 1)];
if (nextResponder) {
[textField resignFirstResponder];
[nextResponder becomeFirstResponder];
}
return YES;
}
hope this will help you
他のヒント
You can use something like this in this method:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if(theTextField == firstField)
{
[secondField becomeFirstResponder];
return YES;
}
if(theTextField == secondField)
{
[thirdField becomeFirstResponder];
[theTextField resignFirstResponder];
return YES;
}
if(theTextField == thirdField)
{
[thirdField becomeFirstResponder];
[theTextField resignFirstResponder];
return YES;
}
[theTextField resignFirstResponder];
return YES;
}
I think you need something like this, https://github.com/lashad/PTPasscodeViewController
try replacing this
if ( range.location >= 4 )
with
if ( range.location >= 3 )
所属していません StackOverflow