Pregunta ¿Cómo descarto el teclado de iOS?


Tengo un UITextfield del que me gustaría descartar el teclado. Parece que no puedo hacer que el teclado desaparezca sin importar el código que use.


73
2017-08-02 01:07


origen


Respuestas:


[myTextField resignFirstResponder]

aquí, segundo párrafo en la sección Administrar el teclado.


61
2017-08-02 01:08



Si tiene varios campos de texto y no sabe cuál es el primero en responder (o simplemente no tiene acceso a los campos de texto desde donde esté escribiendo este código) puede llamar endEditing: en la vista principal que contiene los campos de texto.

En el método de un controlador de vista, se vería así:

[self.view endEditing:YES];

El parámetro fuerza al campo de texto a renunciar al estado de la primera respuesta. Si usaba un delegado para realizar la validación y quería detener todo hasta que el contenido del campo de texto fuera válido, también podría codificarlo de esta manera:

BOOL didEndEditing = [self.view endEditing:NO];
if (didEndEditing) {
    // on to the next thing...
} else {
    // text field must have said to first responder status: "never wanna give you up, never wanna let you down"
}

los endEditing: método es mucho mejor que decir campos de texto individuales a resignFirstResponder, pero por alguna razón nunca me enteré hasta hace poco.


188
2017-08-02 22:22



Hay casos donde ningún campo de texto es el primer respondedor pero el teclado está en pantalla. En estos casos, los métodos anteriores no eliminan el teclado.

Un ejemplo de cómo llegar:

  1. empujar el ABPersonViewController en la pantalla mediante programación; abrir cualquier contacto;
  2. toque el campo "nota" (que se convierte en el primer respondedor y activa el teclado);
  3. deslice hacia la izquierda en cualquier otro campo para que aparezca el botón "eliminar";
  4. en este punto no tiene un primer respondedor entre los campos de texto (simplemente verifique programáticamente) pero el teclado todavía está allí. Llamar a [view endEditing: YES] no hace nada.

En este caso, también debe pedirle al controlador de vista que salga del modo de edición:

[viewController setEditing:NO animated:YES];

8
2018-05-03 16:35



Le sugiero que agregue y actúe en su archivo de encabezado:

-(IBAction)removeKeyboard;

Y en la implementación, escriba algo como esto:

-(IBAction)removeKeyboard
{
[self.textfield resignFirstResponder];
}

En el archivo NIB, conéctese desde UITextFiled al propietario del archivo en la opción DidEndOnExit. De esa manera, cuando presiones regresar, el teclado desaparecerá.

¡Espero eso ayude!


6
2017-08-02 01:26



En su controlador de vista YourViewController.h, asegúrese de implementar el protocolo UITextFieldDelegate:

@interface YourViewController : <UITextFieldDelegate>

@end

Luego, en el archivo YourViewController.m, implemente el siguiente método de instancia:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.yourTextField1 resignFirstResponder];
    [self.yourTextField2 resignFirstResponder];
    ...
    [self.yourTextFieldn resignFirstResponder];
}

6
2018-01-31 18:54



Descubrí un caso donde endEditing y resignFirstResponder fallar. Esto me ha funcionado en esos casos.

ObjC

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];    
[self setEditing:NO];

Rápido

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

5
2018-04-28 19:30



Si no sabes qué campo de texto es el primer respondedor, puedes encontrarlo. Yo uso esta función:

UIView *resignFirstResponder(UIView *theView)
{
    if([theView isFirstResponder])
    {
        [theView resignFirstResponder];
        return theView;
    }
    for(UIView *subview in theView.subviews)
    {
        UIView *result = resignFirstResponder(subview);
        if(result) return result;
    }
    return nil;
}

Luego, en tu código de llamada:

    UIView *resigned = resignFirstResponder([UIScreen mainScreen]);

2
2017-10-17 00:20



Esto va a renunciar a un campo de texto particular

// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

Para renunciar a cualquier campo de texto use el siguiente código

// Swift
self.view!.endEditing(true)

// Objective C
[self.view endEditing:YES];

2
2018-01-06 12:36