shouldChangeCharactersInRange devolviendo viejos resultados iOS

Soy nuevo en iOS. Tengo un viewcontroller para el logging, contiene tres UITextfields para correo electrónico, contraseña, Confirmar contraseña y un UIButton. Tengo algunas validaciones. Sobre el éxito de esas validaciones, tengo que habilitar el button de logging. Lo he implementado a través de shouldChangeCharactersInRange , pero me devuelve viejos caracteres, por ejemplo

I type a => It returns me "" then I type ab => It returns a then I remove b => It returns me ab 

En realidad es:

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([textField.text length]>0) { [self enableSignUpButton]; } return YES; } -(void)enableSignUpButton { if ([emailTextField.text length]>0 && [passwordTextfield.text length]>0 && [confirmPasswordTextfield.text length]>0) signUpButton.enabled=TRUE; return; } signUpButton.enabled=FALSE; } 

¿No creo dinámicamente el valor del campo de text? o

Ayúdame a salir de esto.

Manejar evento de cambio de text como este

 - (void)viewDidLoad { [super viewDidLoad]; [self.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; } - (void)textFieldDidChange:(UITextField *)aTextField { if ([textField.text length]>0) { [self enableSignUpButton]; } else { // NOTE [self disableSignupButton]; } } 

si desea get el text de actualización, debe agregar una línea en el método shouldChangeCharactersInRange , ya que tempStr imprimirá su text actualizado

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *tempStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; NSLog(@"updated Text: %@",tempStr); if ([tempStr length] > 0) { [self enableSignUpButton]; } return YES; } 

Primero debe agregar la nueva cadena en el text existente y luego comparar la longitud

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSUInteger newLength = [textField.text length] + [string length] - range.length; if (newLength>0) { [self enableSignUpButton]; } return YES; } 
 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

Eche un vistazo al nombre de este método. Se llama "shouldChange" no "hasChanged". Entonces, cuando se llama a este método, el contenido de los campos de text no se actualiza todavía, pero puede decidir si debería ocurrir el siguiente cambio.

Claus