¿Cómo hacer que la tecla de retorno en iPhone haga desaparecer el teclado?

108

Tengo dos UITextFields(por ejemplo, nombre de usuario y contraseña) pero no puedo deshacerme del teclado cuando presiono la tecla de retorno en el teclado. ¿Cómo puedo hacer esto?

K.Honda
fuente

Respuestas:

242

Primero debe cumplir con el UITextFieldDelegateProtocolo en el archivo de encabezado de su View / ViewController de esta manera:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Luego, en su archivo .m, debe implementar el siguiente UITextFieldDelegatemétodo de protocolo:

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

    return YES;
}

[textField resignFirstResponder]; se asegura de que el teclado se cierre.

Asegúrese de que está configurando su vista / controlador de vista para que sea el delegado de UITextField después de iniciar el campo de texto en el .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on
Sid
fuente
7
También puede implementar el delegado en el guión gráfico haciendo clic en el campo de texto, mostrar el panel de Utilidades, hacer clic en Inspector de conexiones, arrastrar la salida del delegado al controlador de vista.
guptron
1
¿Dónde está implementado su método textFieldShouldReturn? Debe configurar esa clase para que sea el delegado de UITextField. La devolución de llamada del delegado solo se activará desde la clase que está configurada para ser el delegado y si la clase la ha implementado.
Sid
1
¿Ha configurado MyViewController para que se ajuste a UITextFieldDelegate en su encabezado?
Sid
1
Siempre que myTextField se haya asignado correctamente y no sea nulo. Técnicamente, está bien si es nulo (sin bloqueo) pero eso no hará nada :)
Sid
1
Y si puedo agregar, no importa si solo está utilizando una clase UITextField anulada , como UIFloatLabelTextField, TODAVÍA NECESITA yourTextField.delegate = self; !!!
Gellie Ann
19

Implemente el método UITextFieldDelegate como este:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}
Nick Weaver
fuente
6

Sus UITextFields deben tener un objeto delegado (UITextFieldDelegate). Use el siguiente código en su delegado para hacer desaparecer el teclado:

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

Debería funcionar hasta ahora ...

cschwarz
fuente
Oye amigo, hice lo que dijiste anteriormente, pero todavía no puedo hacer que el teclado desaparezca. ¿Tienes alguna idea? Gracias.
K.Honda
Hola Chris, todo está arreglado ahora. Gracias.
K.Honda
6

Me tomó un par de pruebas, tuve el mismo problema, esto funcionó para mí:

Revisa tu ortografía en -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Corregí el mío en en textFieldlugar de textfield, capitalizar "F" ... ¡y bingo! funcionó..

Ema
fuente
4

Cuando se presiona la tecla de retorno, llame a:

[uitextfield resignFirstResponder];
Conor Taylor
fuente
Hola Conor, ¿cómo sabe la aplicación cuando se presiona la tecla de retorno? Gracias.
K.Honda
3

Después de bastante tiempo buscando algo que tenga sentido, esto es lo que armé y funcionó a la perfección.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.metro

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

¡Espero que esto ayude!

usuario2904476
fuente
3

Configure el Delegado de UITextField en su ViewController, agregue una salida de referencia entre el Propietario del archivo y UITextField, luego implemente este método:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}
Avinash651
fuente
3

Agregue esto en lugar de la clase predefinida

class ViewController: UIViewController, UITextFieldDelegate {

Para quitar el teclado cuando se hace clic fuera del teclado

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

y para quitar el teclado cuando se presiona enter

agregue esta línea en viewDidLoad ()

inputField es el nombre del textField utilizado.

self.inputField.delegate = self

y agrega esta función

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }
Ali Kahoot
fuente
2

Rápido 2:

¡esto es lo que se hizo para hacer todo!

cerrar el teclado con el Donebotón o Touch outSide,Next para ir a la siguiente entrada.

Primero cambie TextFiled Return KeyTo Nexten StoryBoard.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}
Mojtabye
fuente
Apple desaconseja explícitamente el uso de etiquetas. En su lugar, podría usar una IBOutletCollection
Antzi
2

en rápido, debe delegar UITextfieldDelegate , es importante, no lo olvide, en el viewController, como:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}
Eduardo Oliveros
fuente
0

Puede agregar una IBAction al uiTextField (el evento de releation es "Did End On Exit"), y la IBAction puede denominarse hideKeyboard,

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

Además, puede aplicarlo a los otros campos de texto o botones, por ejemplo, puede agregar un botón oculto a la vista, cuando hace clic en él para ocultar el teclado.

慭 慭 流 觞
fuente
0

Si desea que el teclado desaparezca al escribir en archivos de texto de cuadro de alerta

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
DURGESH
fuente