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

283voto

Nitin Gohel Points 19461

Le moyen le plus simple est de connecter le délégué de UITextField à soi ( self.mytestField.delegate = self ) et de rejeter le clavier dans la méthode textFieldShouldReturn en utilisant [textField resignFirstResponder];

Une autre façon d'écarter le clavier est la suivante :

Objectif-C

[self.view endEditing:YES];

Swift :

self.view.endEditing(true)

Mettez [self.view endEditing:YES]; où vous souhaitez renvoyer le clavier (événement bouton, événement toucher, etc.).

31voto

iPatel Points 15121

Ajouter une méthode déléguée de UITextField comme ça :

@interface MyController : UIViewController <UITextFieldDelegate>

Et mettez votre textField.delegate = self; puis ajoutez également deux méthodes déléguées de UITextField

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

// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

29voto

Chathuranga Silva Points 4323

Il suffit de l'utiliser dans le clavier swift to dismiss :

UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)

Swift 3

UIApplication.shared.sendAction(#selector(UIResponder.resign‌​FirstResponder), to: nil, from: nil, for: nil)

26voto

Vijay Dokrimare Points 11

/Masquer le clavier en touchant l'arrière-plan dans la vue

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

20voto

Sam Points 127

SWIFT 4 :

self.view.endEditing(true)

ou

Définir le délégué du champ de texte au viewcontroller actuel et ensuite :

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()

    return true

}

Objective-C :

[self.view endEditing:YES];

ou

Définir le délégué du champ de texte au viewcontroller actuel et ensuite :

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

    return YES;
}

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