Cambiar el tipo de key de retorno de uitextfield mientras se edita

Tengo 4 uitextfields que reconocen cuando están vacíos o completos. Si se completa, cambian su tipo de key de retorno a GO, de lo contrario, es el pnetworkingeterminado. El problema es que el keyboard no está cambiando el tipo de key, aunque uso el file reloadinputview

- (void)viewDidLoad { [super viewDidLoad]; _fieldsArray = @[_nameField, _passwordField, _emailField, _usernameField]; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSRange textFieldRange = NSMakeRange(0, [textField.text length]); //NSLog(@"%d", !(NSEqualRanges(range, textFieldRange) && [string length] == 0)); [self signUpFieldsAreValid:(!(NSEqualRanges(range, textFieldRange) && [string length] == 0) && [self validateSignUpFields:textField])]; [textField reloadInputViews]; return YES; } - (BOOL)textFieldShouldClear:(UITextField *)textField{ [self signUpFieldsAreValid:NO]; [textField reloadInputViews]; return YES; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { for (UITextField *aTextField in _fieldsArray) { if (aTextField.isFirstResponder) { aTextField.layer.borderWidth = 0.f; aTextField.layer.borderColor = nil; } } textField.layer.borderWidth = 1.f; textField.layer.borderColor = [UIColor colorWithRed:200.f/255.f green:0.f/255.f blue:4.f/255.f alpha:1.f].CGColor; return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { NSUInteger fieldIndex = [_fieldsArray indexOfObject:textField]; [_fieldsArray[(fieldIndex + 1) % 4] becomeFirstResponder]; return YES; } - (BOOL)validateSignUpFields:(UITextField *)firstResponder { for (UITextField *aTextField in _fieldsArray) { if (!aTextField.text.length && ![aTextField isEqual:firstResponder]) { return NO; } } return YES; } - (void)signUpFieldsAreValid:(BOOL)valid { NSLog(@"%d", valid); for (UITextField *aTextField in _fieldsArray) { if (valid) { aTextField.returnKeyType = UIReturnKeyGo; } else { aTextField.returnKeyType = UIReturnKeyDefault; } } } 

Utilicé lo siguiente después de cambiar el returnKeyType y parecía funcionar muy bien en iOS7 y iOS6.1:

 if ([self.textfieldOne isFirstResponder]) { [self.textfieldOne reloadInputViews]; } 

Prueba esto.

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; { NSString *newStr=[textField.text stringByReplacingCharactersInRange:range withString:string]; if([newStr length] > 0) { textField.returnKeyType = UIReturnKeySearch; } else { textField.returnKeyType = UIReturnKeyDefault; } [textField resignFirstResponder]; [textField becomeFirstResponder]; return YES; } 

De acuerdo con los documentos, reloadInputViews solo afecta las vistas de input personalizadas, no el keyboard estándar.

Lo que he hecho para resolver este problema es llamar resignFirstResponder luego becomeFirstResponder . Esto actualizará el keyboard sin ninguna animation:

En lugar de:

 [textFiled reloadInputViews]; 

hacer:

 [textField resignFirstResponder]; [textField becomeFirstResponder]; 

Utilicé lo siguiente después de cambiar el returnKeyType y parecía funcionar muy bien en iOS7 y iOS6.1:

 if ([self.textfieldOne isFirstResponder]) { [self.textfieldOne reloadInputViews]; }