2010-05-08 27 views
8

Me gustaría realizar una determinada acción cuando UITextField se vacía (el usuario elimina todo un signo después de otro o utiliza la opción de borrar).Cómo detectar cuando UITextField se vacía

Pensé en usar dos métodos

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 

y

- (BOOL)textFieldShouldClear:(UITextField *)textField; 

de

UITextFieldDelegate 

No estoy seguro de cómo detectar la situación cuando el campo de texto se convierte en vacío? he intentado con:

if ([textField.text length] == 0) 

pero does't trabajo como el fisrt de los métodos anteriores se llama antes de que la señal se elimina del campo de texto.

¿Alguna idea?

Respuesta

37
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSRange textFieldRange = NSMakeRange(0, [textField.text length]); 
    if (NSEqualRanges(range, textFieldRange) && [string length] == 0) { 
     // Game on: when you return YES from this, your field will be empty 
    } 
    return YES; 
} 

Es útil tener en cuenta que el campo no estará vacía hasta después devuelve este método, por lo que es posible que desee establecer un estado intermedio, utilice entonces textFieldDidEndEditing: saber que el usuario ha terminado de vaciar el campo .

0

El siguiente código también funciona.

-(void)textfieldDidChange:(UITextField *)textField 

{

if (textField == first) 
{ 

    [second becomeFirstResponder]; 

} 
else if(textField == second) 
{ 
    if (textField.text.length == 0) 
    { 
     [first becomeFirstResponder]; 
    } 
    else 
    { 
     [third becomeFirstResponder]; 
    } 

} 
else if(textField == third) 
{ 
    if (textField.text.length == 0) 
    { 
     [second becomeFirstResponder]; 
    } 
    else 
    { 
     [four becomeFirstResponder]; 
    } 

} 

else if(textField == four) 
{ 
    if (textField.text.length == 0) 
    { 
     [third becomeFirstResponder]; 
    } 
    else 
    { 
     [four becomeFirstResponder]; 
    } 

} 
} 

objetivo Agregado para cada campo de texto. Para mí tuve que colocar el cursor en el campo anterior cuando el texto está vacío en el campo de texto actual. Avísame si necesitas alguna claridad.

Cuestiones relacionadas