iphone - cerrar - ocultar teclado ios swift
Ocultar el teclado cuando se presiona el botón de borrar en UITextField (5)
En UITextFieldDelegate
- (BOOL)textFieldShouldClear:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
Pero hay un problema con esto. En el manual, "El campo de texto llama a este método en respuesta al usuario que presiona el botón de borrado incorporado. (Este botón no se muestra de manera predeterminada, pero se puede activar cambiando el valor en la propiedad clearButtonMode del campo de texto). Este método también se llama cuando comienza la edición y la propiedad clearsOnBeginEditing del campo de texto se establece en SÍ ".
Tenga en cuenta que se llama a este método cuando comienza la edición si clearsOnBeginEditing se establece en YES. Entonces, si llama a resignFirstResponder en este método, la edición no comenzará realmente. Por lo tanto, debe establecer clearsOnBeginEditing en NO. Obviamente, entonces el campo de texto no se borrará cuando comience la edición.
Otro asunto IMPORTANTE no relacionado directamente con la pregunta. Ocultar el teclado después de tocar el botón de borrar no es un comportamiento familiar y a Apple NO le gusta cambiar el comportamiento de los elementos estándar. Puede obtener un rechazo por esto.
¿Hay alguna forma de ocultar el teclado cuando se presiona un botón claro de UITextField
?
Este código definitivamente está trabajando para que yo oculte el tablero de teclas mientras borro el contenido del campo de texto
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
textField.text = @"";
return NO;
}
Prueba este código:
[TextField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];
Sí, 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 convierte el controlador de vista en el delegado de tu campo de texto.
- (BOOL) textFieldShouldClear:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
La desventaja de este enfoque es que si alguna vez desea evitar que se borre el campo de texto, su código se vuelve desordenado. En su lugar, puede intentar 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 toque en el botón de borrar y un toque en el botón de eliminar cuando hay un carácter en el UITextField.
Como dije al principio de mi respuesta, esto no es aconsejable en primer lugar y, como se muestra en las respuestas aquí, no es tan fácil de implementar. No creo que valga la pena la molestia, considerando la dificultad involucrada y el hecho de que no resulta en una experiencia de usuario óptima.
Sí. Llame a resignFirstResponder
en el campo de texto en el método textFieldShouldClear:
del delegado.