2011-01-30 9 views

Respuesta

41

Sí, lo hay, aunque sospecho que hacerlo violaría las Pautas de interfaz humana de Apple.

Para hacerlo, agregue el siguiente método al archivo de implementación de su controlador de vista. Luego, convierta el controlador de visualización en el delegado de su campo de texto.

- (BOOL) textFieldShouldClear:(UITextField *)textField{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

La desventaja de este enfoque es que si alguna vez desea evitar que el campo de texto de la limpieza, el código se vuelve desordenado. En cambio, puede tratar de definir un método personalizado y luego conectarlo al método valueDidChange y verificar si hay un valor vacío.

-(IBAction)hideKeyboardFromTextField:(id)sender{ 
    //TODO: Check if the previous value was longer than one character to differentiate 
    //between backspace and clear. 

    //check if the editing caused the box to be empty 
    if([[sender value] isEqualToString:@""] || [sender value] == nil) 
    [sender resignFirstResponder]; 
    } 
} 

El problema aquí es que no se puede diferenciar fácilmente entre un golpecito en el botón clara y un toque en el botón de borrar cuando hay un carácter en el UITextField.

Como dije al principio de mi respuesta, esto no es aconsejable en primer lugar y como las respuestas aquí lo han demostrado, no es tan fácil de implementar. No creo que valga la pena, teniendo en cuenta la dificultad que implica y el hecho de que no da como resultado una experiencia de usuario óptima.

+0

+1 para una respuesta detallada. gracias a todos. –

1

En UITextFieldDelegate

 
- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 

Pero hay un problema con esto. Del manual, "El campo de texto llama a este método en respuesta al usuario que presiona el botón claro integrado. (Este botón no se muestra de manera predeterminada, pero se puede habilitar cambiando el valor en la propiedad clearButtonMode del campo de texto). Este método también se invoca cuando comienza la edición y la propiedad clearsOnBeginEditing del campo de texto se establece en SÍ. "

Tenga en cuenta que este método se invoca cuando comienza la edición si cleararsOnBeginEditing está establecido en YES. Entonces, si llama a resignFirstResponder en este método, la edición no comenzará en realidad. Por lo tanto, debe configurar cleararsOnBeginEditing en NO. Obviamente, el campo de texto no se borrará cuando comience la edición.

Otro tema IMPORTANTE no directamente relacionado con la pregunta. Ocultar el teclado después de tocar el botón borrar no es un comportamiento familiar y Apple NO le gusta cambiar el comportamiento de los elementos estándar. Puede obtener un rechazo por esto.

0

probar este código:

[TextField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 
7

Este código está definitivamente trabajando para mí para ocultar el teclado mientras se corrige el contenido del campo de texto

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    textField.text = @""; 
    return NO; 
} 
Cuestiones relacionadas