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?

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

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;
}


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 ...


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é..


4

Lorsque vous appuyez sur la touche retour, appelez:

[uitextfield resignFirstResponder];

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!


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;
}

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        
    }

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)
}

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()
     }
}

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.



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];
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.