¿Cómo ocultar el teclado cuando presiono la tecla de retorno en un UITextField?


148

Al hacer clic en un campo de texto, aparece el teclado. ¿Cómo lo oculto cuando el usuario presiona la tecla de retorno?


13
Lo bueno de Stack Overflow es que MUCHAS preguntas ya han sido respondidas, especialmente las simples. Por lo tanto, busque primero las respuestas, antes de preguntar. Mira, es simple: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

Esta es una subclase de UITextfield que cambia dinámicamente la UIReturnKey de acuerdo con la condición del texto / cadena: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Respuestas:


286

Primero haga que su delegado de archivos para UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Luego agregue este método a su código.

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

También agregue self.textField.delegate = self;


1
Curioso, ¿por qué <UITextFieldDelegate> no es necesario? Por lo general, verá una advertencia en este caso.
pixelfreak

77
si hace que su archivo delegue usando Interface Builder, entonces <UITextFieldDelegate> no es necesario en el archivo .h ..
Saurabh

1
agregando <UITextFieldDelegate> en el archivo .h y establezca delegado en viewdidload [yourTextField setDelegate: self]; lo completará!
Umit Kaya

@Saurabh ¿Qué tiene de especial el storyboard creado VC?
Paul Brewczynski

62

En viewDidLoaddeclarar:

[yourTextField setDelegate:self];

Luego, incluya la anulación del método delegado:

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

66
+1 para el setDelegate:recordatorio. Definitivamente lo había olvidado y el código no funcionaba anteriormente.
piperchester

2
¿No debería ser textField, en lugar de yourTextField, ya que se pasa?
Clive Jefferies

es una forma de decir que declaras al delegado de tu campo de texto
oscar castellon

1
<UITextFieldDelegate> debe estar en el archivo .h, de lo contrario aparecerá una advertencia.
Umit Kaya

22

Prueba esto en Swift ,

Paso 1: establezca delegado como uno mismo para sutextField

textField.delegate = self

Paso 2: Agregue este UITextFieldDelegate debajo de su declaración de clase,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

En swift, haga lo siguiente:
Primero en su ViewControllerimplementación, esto UITextFieldDelegate por ejemplo.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Ahora agregue un delegado a uno TextFielden el que desea descartar el teclado cuando se toca regresar, ya sea en el viewDidLoadmétodo como a continuación o donde lo está inicializando. Por ej.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Ahora agregue este método.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
El segundo paso no es necesario si establece delegado en IB.
hris.to

Aparece (en las versiones actuales de Swift) debe haber un guión bajo antes de "textField:"
Bryce Sandlund

2

Prueba esto,

[textField setDelegate: self];

Luego, en el método delegado textField

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

esa no es la mejor práctica para hacer eso.
orafaelreis

necesita UITextFieldDelegate en la definición de la interfaz.
Alp Altunel

@AlpAltunel: Gracias por el comentario, fue hace 4 años.
Vineesh TP

1

establecer delegado de UITextField, y over-ride, textFieldShouldReturnmétodo, en ese método simplemente escriba las siguientes dos líneas:

[textField resignFirstResponder];
return YES;

Eso es. Antes de escribir un código, no olvide establecer delegado de a UITextFieldy establecer el tipo de clave de retorno en "Listo" desde la ventana de propiedades (comando + shift + I).


1

Puede conectar "Acción primaria activada" (haga clic con el botón derecho en UITextField) con un IBAction y puede renunciar al primer respondedor (sin delegación). Ejemplo (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Forma preferida si se usan guiones gráficos.
lal

1

Swift 4

Establezca delegado de UITextFieldin view controller field.delegate = self, y luego:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

¿Cómo manejaría querer que los usuarios 'tabulen' al siguiente campo de texto con solo presionar la tecla de retorno, hasta el último y luego renuncia? También en SwiftUI.
Learn2Code

@ Learn2Code crea un administrador, recopila campos de texto y encadena, el último activará la función de finalización.
dimpiax

1

Si desea ocultar el teclado para un uso particular del teclado [self.view resignFirstResponder]; Si desea ocultar cualquier teclado de la vista, use[self.view endEditing:true];



0

Ok, creo que para un novato las cosas pueden ser un poco confusas. Creo que la respuesta correcta es una mezcla de todo lo anterior, al menos en Swift4.

Cree una extensión o use el ViewController en el que desea usar esto, pero asegúrese de implementar UITextFieldDelegate. Por razones de reutilización, encontré que era más fácil usar una extensión:

extension UIViewController : UITextFieldDelegate {
    ...
}

pero la alternativa también funciona:

class MyViewController: UIViewController {
    ...
}

Agregue el método textFieldShouldReturn (dependiendo de su opción anterior, ya sea en la extensión o en su ViewController)

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

En su método viewDidLoad, establezca el delegado del campo de texto en self

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Eso debería ser todo. Ahora, cuando presiona returnel textFieldShouldReturndebería ser llamado.


0

Defina esta clase y luego configure su campo de texto para usar la clase y esto automatiza todo el teclado oculto cuando se presiona el retorno automáticamente.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        textField.resignFirstResponder()
        return true
    }

}

Entonces, todo lo que necesita hacer en el guión gráfico es configurar los campos para usar la clase:

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.