114 votes

Comment désactiver le clavier iOS de manière programmatique en appuyant sur la touche retour ?

J'ai créé un UITextField en rendant programmatiquement le UITextField une propriété du viewController. J'ai besoin de désactiver le clavier avec la touche retour et le toucher de l'écran. J'ai réussi à faire en sorte que le toucher de l'écran permette de rejeter le clavier, mais l'appui sur le retour ne fonctionne pas.

J'ai vu comment le faire avec des story-boards et en allouant et en initialisant les UITextField directement sans le créer en tant que propriété. Est-il possible de le faire ?

.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

@property (strong, atomic) UITextField *username;

@end

.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor blueColor];
    self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
    self.username.placeholder = @"Enter your username";
    self.username.backgroundColor = [UIColor whiteColor];
    self.username.borderStyle = UITextBorderStyleRoundedRect;
    if (self.username.placeholder != nil) {
        self.username.clearsOnBeginEditing = NO;
    }
    _username.delegate = self; 

    [self.view addSubview:self.username];
    [_username resignFirstResponder];

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"touchesBegan:withEvent:");
    [self.view endEditing:YES];
    [super touchesBegan:touches withEvent:event];
}

@end

3voto

zainoz.zaini Points 790

Je sais que d'autres ont répondu à cette question, mais j'ai trouvé un autre article qui traite également de l'absence d'événement d'arrière-plan - tableview ou scrollview.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/

3voto

Juan Boero Points 3753

Puisque les balises ne mentionnent que iOS, je vais poster la réponse pour Swift 1.2 et iOs 8.4. Ajoutez ces éléments dans la classe swift de votre contrôleur de vue :

// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    self.view.endEditing(true)

}

// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {

    textField.resignFirstResponder()

    return true
}
// MARK: -

N'oubliez pas non plus d'ajouter UITextFieldDelegate dans la déclaration de classe et de définir le délégué de vos champs de texte sur self (la vue).

3voto

Rob-4608 Points 779

IN Swift 3

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

OU

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == yourtextfieldName
        {
            self.resignFirstResponder()
            self.view.endEditing(true)
        }
    }

2voto

Jitendra Points 2905

Vous devez d'abord ajouter le champ de texte delegete dans le fichier .h. Si ce n'est pas le cas déclarez (BOOL)textFieldShouldReturn:(UITextField *)textField Cette méthode n'est pas appelée, donc il faut d'abord ajouter un délégué et écrire le code de masquage du clavier dans cette méthode.

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

Essayez celui-ci

2voto

noobsmcgoobs Points 1283

Voici donc ce que j'ai fait pour qu'il se retire après avoir touché l'arrière-plan ou le retour. J'ai dû ajouter le délégué = self dans viewDidLoad et aussi les méthodes du délégué plus tard dans les fichiers .m.

.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

@property (strong, atomic) UITextField *username;

@end

.m
- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor blueColor];
    self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
    self.username.placeholder = @"Enter your username";
    self.username.backgroundColor = [UIColor whiteColor];
    self.username.borderStyle = UITextBorderStyleRoundedRect;
    if (self.username.placeholder != nil) {
        self.username.clearsOnBeginEditing = NO;
    }
    self.username.delegate = self;
    [self.username resignFirstResponder];
    [self.view addSubview:self.username];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    return YES;
}

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

@end

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