Comment faire en sorte que la touche retour sur iPhone fasse disparaître le clavier?

108

J'en ai deux UITextFields(par exemple nom d'utilisateur et mot de passe) mais je ne parviens pas à me débarrasser du clavier en appuyant sur la touche retour du clavier. Comment puis-je faire ceci?

K.Honda
la source

Réponses:

242

Vous devez d'abord vous conformer au UITextFieldDelegateprotocole dans le fichier d'en-tête de votre View / ViewController comme ceci:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Ensuite, dans votre fichier .m, vous devez implémenter la UITextFieldDelegateméthode de protocole suivante :

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

    return YES;
}

[textField resignFirstResponder]; s'assure que le clavier est désactivé.

Assurez-vous que vous définissez votre view / viewcontroller pour être le délégué de UITextField après avoir initialisé le champ de texte dans le .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
la source
7
Vous pouvez également implémenter le délégué dans le storyboard en cliquant sur le champ de texte, afficher le panneau Utilitaires, cliquer sur l'inspecteur de connexions, faire glisser la sortie du délégué sur le contrôleur de vue.
guptron
1
Où votre méthode textFieldShouldReturn est-elle implémentée? Vous devez définir cette classe pour qu'elle soit le délégué de UITextField. Le rappel de délégué se déclenchera uniquement à partir de la classe définie comme délégué et si la classe l'a implémenté.
Sid
1
Avez-vous configuré MyViewController pour qu'il se conforme à UITextFieldDelegate dans son en-tête?
Sid
1
Tant que myTextField a été alloué correctement et n'est pas nul. Techniquement, ça va si c'est nul (pas de crash) mais ça ne fera rien :)
Sid
1
Et si je peux ajouter, il n'a pas d' importance si vous utilisez juste une surchargée classe UITextField, tels que UIFloatLabelTextField, vous devez toujours yourTextField.delegate = auto; !!!
Gellie Ann
19

Implémentez la méthode UITextFieldDelegate comme ceci:

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

Vos UITextFields doivent avoir un objet délégué (UITextFieldDelegate). Utilisez le code suivant dans votre délégué pour faire disparaître le clavier:

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

Devrait fonctionner jusqu'à présent ...

cschwarz
la source
Hey mec, j'ai fait ce que vous avez dit ci-dessus mais je n'arrive toujours pas à faire disparaître le clavier. As tu des idées? Merci.
K.Honda
Hey Chris, tout est réglé maintenant. Merci.
K.Honda
6

Cela m'a pris quelques essais, a eu le même problème, cela a fonctionné pour moi:

Vérifiez votre orthographe sur -

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

J'ai corrigé le mien au textFieldlieu de textfield, mettre "F" en majuscule ... et bingo !! ça a marché..

Ema
la source
4

Lorsque vous appuyez sur la touche retour, appelez:

[uitextfield resignFirstResponder];
Conor Taylor
la source
Hey Conor, comment l'application sait-elle quand la touche retour est enfoncée? Merci.
K.Honda
3

Après pas mal de temps à chercher quelque chose qui a du sens, c'est ce que j'ai mis en place et cela a fonctionné comme un charme.

.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

J'espère que cela t'aides!

user2904476
la source
3

Définissez le délégué de l'UITextField sur votre ViewController, ajoutez une prise de référence entre le propriétaire du fichier et l'UITextField, puis implémentez cette méthode:

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

Ajoutez ceci au lieu de la classe prédéfinie

class ViewController: UIViewController, UITextFieldDelegate {

Pour retirer le clavier lorsque vous cliquez en dehors du clavier

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

et pour retirer le clavier lorsque vous appuyez sur Entrée

ajouter cette ligne dans viewDidLoad ()

inputField est le nom du textField utilisé.

self.inputField.delegate = self

et ajoutez cette fonction

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

Swift 2:

c'est ce qu'on fait pour tout faire!

fermez le clavier avec le Donebouton ou Touch outSide, Nextpour passer à l'entrée suivante.

Premier changement TextFiled Return KeyPour NextStoryboard.

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
la source
L'utilisation de balises est explicitement déconseillée par Apple. Vous pouvez utiliser une IBOutletCollection à la place
Antzi
2

en swift, vous devez déléguer UITextfieldDelegate , son important ne l'oubliez pas, dans le viewController, comme:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

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

Vous pouvez ajouter une IBAction à uiTextField (l'événement de releation est "Did End On Exit"), et l'IBAction peut être nommée hideKeyboard,

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

vous pouvez également l'appliquer aux autres textFields ou boutons, par exemple, vous pouvez ajouter un bouton masqué à la vue, lorsque vous cliquez dessus pour masquer le clavier.

慭 慭 流 觞
la source
0

Vous pouvez essayer cette sous-classe UITextfield dans laquelle vous pouvez définir une condition pour que le texte modifie dynamiquement l'UIReturnKey:
https://github.com/codeinteractiveapps/OBReturnKeyTextField

CodeInteractif
la source
Veuillez expliquer votre réponse et copier la partie pertinente du lien vers le message.
Rohit Gupta
0

Si vous souhaitez faire disparaître le clavier lors de l'écriture sur les fichiers de texte de la zone d'alerte

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
DURGESH
la source