51 votes

Clavier iPhone, bouton Terminé et ResignFirstResponder

C'est probablement une question stupide, mais je ne trouve pas la réponse dans les docs. N'a le bouton "Terminé" sur le clavier pop-up toujours provoquer le clavier à disparaître? Je vois beaucoup de code sur le web comme ceci:

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

Lorsque j'appuie sur le bouton "Terminé", le clavier apparaît vers le bas et l' UITextField démissionne de ses fonctions de premier répondant.

Je suis en supposant qu'en appuyant sur le bouton "Terminé" n'a pas l'habitude de causer un UITextField de resignFirstResponder, mais que le comportement a changé en peu de temps.

Je suis de débogage sur OS 3.0 - 3.1.3

93voto

nevan king Points 46410

J'ai fait un petit projet de test avec juste un UITextField et ce code

 #import <UIKit/UIKit.h>
@interface TextFieldTestViewController : UIViewController
<UITextFieldDelegate>
{
    UITextField *textField;
}
@property (nonatomic, retain) IBOutlet UITextField *textField;
@end

#import "TextFieldTestViewController.h"
@implementation TextFieldTestViewController
@synthesize textField;

- (void)viewDidLoad
{
    [self.textField setDelegate:self];
    [self.textField setReturnKeyType:UIReturnKeyDone];
    [self.textField addTarget:self
                  action:@selector(textFieldFinished:)
        forControlEvents:UIControlEventEditingDidEndOnExit];
    [super viewDidLoad];
}
- (IBAction)textFieldFinished:(id)sender
{
    // [sender resignFirstResponder];
}

- (void)dealloc {
    [super dealloc];
}
@end
 

Le champ de texte est un UITextField non modifié glissé sur le NIB, avec la prise connectée.
Après avoir chargé l'application, cliquez dans le champ de texte pour afficher le clavier. En appuyant sur le bouton "Terminé", le champ de texte devient flou et anime le clavier. Notez que le conseil sur le Web est de toujours utiliser [sender resignFirstResponder] mais cela fonctionne sans cela.

15voto

bickster Points 332

Dans Xcode 5.1

Activer le bouton Terminé

  • Dans l'Inspecteur des attributs pour UITextField dans le Storyboard, recherchez le champ "Clé de retour" et sélectionnez "Terminé".

Masquer le clavier lorsque Done est enfoncé

  • Dans Storyboard, faites de ViewController le délégué de UITextField.
  • Ajouter cette méthode à votre ViewController

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

6voto

bealex Points 7456

À partir de la documentation (toute version):

Il est de votre application la responsabilité pour fermer le clavier au moment de votre choix. Vous pourrait rejeter le clavier en réponse pour un utilisateur spécifique, comme par exemple la l'utilisateur de taper un bouton particulier dans votre interface utilisateur. Vous pouvez également configurer votre zone de texte délégué à fermer le clavier lorsque l'utilisateur appuie sur la touche "retour" sur le le clavier lui-même. Pour rejeter la clavier, envoyer le resignFirstResponder message à l' champ de texte qui est actuellement le premier répondeur. En procédant ainsi, le texte champ de l'objet à la fin de la session d'édition (avec le délégué objet du consentement) et masquer les clavier.

Donc, vous devez envoyer resignFirstResponder en quelque sorte. Mais il y a une possibilité que le champ perd le focus d'une autre manière au cours du traitement de textFieldShouldReturn: message. Ce sera également la cause du clavier à disparaître.

2voto

mmx Points 24

Un code de ligne pour le bouton Terminé: -

 [yourTextField setReturnKeyType:UIReturnKeyDone];
 

Et ajoutez la méthode d’action sur valueChanged de TextField et ajoutez cette ligne-

 [yourTextField resignFirstResponder];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X