Como fazer a tecla de retorno no iPhone fazer o teclado desaparecer?

108

Tenho dois UITextFields(por exemplo, nome de usuário e senha), mas não consigo me livrar do teclado ao pressionar a tecla Enter no teclado. Como posso fazer isso?

K.Honda
fonte

Respostas:

242

Primeiro você precisa estar em conformidade com o UITextFieldDelegateprotocolo no arquivo de cabeçalho do seu View / ViewController como este:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Então, em seu arquivo .m, você precisa implementar o seguinte UITextFieldDelegatemétodo de protocolo:

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

    return YES;
}

[textField resignFirstResponder]; certifica-se de que o teclado seja descartado.

Certifique-se de configurar seu view / viewcontroller para ser o delegado do UITextField depois de inicializar o campo de texto no .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
fonte
7
Você também pode implementar o delegado no storyboard clicando no campo de texto, mostrar o painel Utilitários, clicar em Inspetor de conexões e arrastar a saída do delegado para o controlador de visualização.
guptron de
1
Onde seu método textFieldShouldReturn está implementado? Você precisa definir essa classe para ser o delegado do UITextField. O retorno de chamada do delegado só será acionado na classe definida para ser o delegado e se a classe o tiver implementado.
Sid
1
Você configurou MyViewController para estar em conformidade com UITextFieldDelegate em seu cabeçalho?
Sid
1
Desde que myTextField tenha sido alocado corretamente e não seja nulo. Tecnicamente, está tudo bem se for nulo (sem travar), mas isso não fará nada :)
Sid
1
E, se posso acrescentar, não importa se você está apenas usando uma classe UITextField substituída , como UIFloatLabelTextField, você AINDA PRECISA de yourTextField.delegate = self; !!!
Gellie Ann
19

Implemente o método UITextFieldDelegate assim:

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

Seus UITextFields devem ter um objeto delegado (UITextFieldDelegate). Use o seguinte código em seu delegado para fazer o teclado desaparecer:

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

Deve funcionar até agora ...

cschwarz
fonte
Ei, cara, eu fiz o que você disse acima, mas ainda não consigo fazer o teclado desaparecer. Você tem alguma ideia? Obrigado.
K.Honda
Ei, Chris, está tudo resolvido agora. Obrigado.
K.Honda
6

Levei algumas tentativas, tive o mesmo problema, isso funcionou para mim:

Verifique a ortografia em -

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

Eu corrigi o meu em em textFieldvez de textfield, maiúsculo "F" ... e bingo !! funcionou..

Ema
fonte
4

Quando a tecla de retorno for pressionada, chame:

[uitextfield resignFirstResponder];
Conor Taylor
fonte
Ei, Conor, como o app sabe quando a tecla Enter é pressionada? Obrigado.
K.Honda
3

Depois de um bom tempo procurando algo que fizesse sentido, foi isso que eu montei e funcionou como um encanto.

.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

.m

//
//  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 isto ajude!

user2904476
fonte
3

Defina o Delegado do UITextField como seu ViewController, adicione uma saída de referência entre o Proprietário do arquivo e o UITextField e implemente este método:

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

Adicione isso em vez da classe predefinida

class ViewController: UIViewController, UITextFieldDelegate {

Para remover o teclado quando clicado fora do teclado

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

e para remover o teclado quando pressionado enter

adicione esta linha em viewDidLoad ()

inputField é o nome do textField usado.

self.inputField.delegate = self

e adicionar esta função

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

Swift 2:

isso é o que é feito para fazer tudo!

feche o teclado com o Donebotão ou Touch outSide, Nextpara ir para a próxima entrada.

Primeiro altere TextFiled Return Keypara Nextno 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
fonte
O uso de tags é explicitamente desencorajado pela apple. Em vez disso, você poderia usar um IBOutletCollection
Antzi de
2

em breve você deve delegar UITextfieldDelegate , é importante não se esquecer disso, no viewController, como:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

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

Você pode adicionar uma IBAction ao uiTextField (o evento de lançamento é "Did End On Exit"), e a IBAction pode se chamar hideKeyboard,

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

também, você pode aplicá-lo a outros textFields ou botões, por exemplo, você pode adicionar um botão oculto à visualização, ao clicar nele para ocultar o teclado.

慭 慭 流 觞
fonte
0

Se você quiser que o teclado desapareça ao escrever em campos de texto da caixa de alerta

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