it-swarm.com.de

Wie kann ich die iOS-Tastatur beim Drücken der Eingabetaste programmatisch schließen?

Ich habe eine UITextField erstellt, die programmgesteuert die UITextField zu einer Eigenschaft des viewControllers macht. Ich muss die Tastatur mit der Rückkehr und der Berührung auf dem Bildschirm schließen. Ich konnte die Bildschirmberührung abweisen, aber das Drücken der Eingabetaste funktioniert nicht. 

Ich habe gesehen, wie man das mit Storyboards macht und das UITextField-Objekt direkt zuweist und initialisiert, ohne es als Eigenschaft zu erstellen. Möglich zu tun?

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

Die einfache Möglichkeit ist, den Delegierten von UITextField mit self (self.mytestField.delegate = self) zu verbinden und die Tastatur in der Methode textFieldShouldReturn mit [textField resignFirstResponder]; zu schließen. 

Eine andere Möglichkeit, die Tastatur zu schließen, ist die folgende:

[self.view endEditing:YES];

Geben Sie an [self.view endEditing:YES]; die Stelle ein, an der Sie die Tastatur schließen möchten (Button-Ereignis, Touch-Ereignis usw.).

241
Nitin Gohel

Fügen Sie eine Delegatmethode von UITextField wie folgt hinzu:

@interface MyController : UIViewController <UITextFieldDelegate>

Legen Sie Ihren textField.delegate = self; fest und fügen Sie auch zwei Delegatmethoden von UITextField hinzu. 

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

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

// Tastatur durch Berühren des Hintergrunds in der Ansicht ausblenden

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

verwenden Sie einfach dieses in Swift, um die Tastatur zu schließen:

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

Swift 4:

self.view.endEditing(true)

oder

Setzen Sie den Delegaten des Textfelds auf den aktuellen Viewcontroller und dann:

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

    textField.resignFirstResponder()

    return true

}

Ziel c:

[self.view endEditing:YES];

oder

Setzen Sie den Delegaten des Textfelds auf den aktuellen Viewcontroller und dann:

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

    return YES;
}
8
Sam

Folgendes verwende ich in meinem Code. Es wirkt wie ein Zauber!

Fügen Sie in yourviewcontroller.h Folgendes hinzu:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

Fügen Sie nun in der M-Datei Folgendes zu Ihrer ViewDidLoad-Funktion hinzu:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}

Fügen Sie außerdem diese Funktion in der M-Datei hinzu:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}
6
Takide

Im App-Delegierten können Sie schreiben

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

auf diese Weise können Sie nicht zu viel Code schreiben.

6
DKong

Versuchen Sie, eine Vorstellung davon zu bekommen, was ein Ersthelfer in der iOS-Ansichtshierarchie ist. Wenn Ihr Textfeld aktiv wird (oder der erste Benutzer ist), wenn Sie darin berühren (oder die Meldung becomeFirstResponder programmgesteuert übergeben), wird die Tastatur angezeigt. Um Ihr Textfeld vom ersten Responder zu entfernen, sollten Sie die Nachricht resignFirstResponder an dieses Feld übergeben.

[textField resignFirstResponder];

Um die Tastatur auf der Zurück-Schaltfläche zu verbergen, sollten Sie ihre Delegatmethode textFieldShouldReturn: implementieren und die resignFirstResponder-Nachricht übergeben.

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

Für eine Gruppe von UITextViews innerhalb einer ViewController:

Swift 3.0

for view in view.subviews {
    if view is UITextField {
        view.resignFirstResponder()
    }
}

Ziel c

// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        // no need to cast
        [view resignFirstResponder];
    }
}
3

Um eine Tastatur nach dem Auftauchen zu schließen, gibt es 2 Fälle ,

  1. wenn sich das UITextField in einer UIScrollView befindet

  2. wenn sich das UITextField außerhalb einer UIScrollView befindet

2. Überschreiben Sie die Methode in Ihrer UIViewController-Unterklasse, wenn sich das UITextField außerhalb einer UIScrollView befindet

sie müssen auch einen Delegaten für alle UITextView hinzufügen

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. In einer Bildlaufansicht wird durch Antippen von außen kein Ereignis ausgelöst . Verwenden Sie in diesem Fall einen Tap Gesture Recognizer , ziehen Sie eine UITapGesture für die Bildlaufansicht und erstellen Sie eine IBAction für es .

um eine IBAction zu erstellen, drücken Sie Strg + klicken Sie auf die UITapGesture und ziehen Sie sie in die .h-Datei von viewcontroller.

Hier habe ich tappedEvent als meinen Aktionsnamen benannt

- (IBAction)tappedEvent:(id)sender {
      [self.view endEditing:YES];  }

die oben angegebenen Informationen wurden von dem folgenden Link abgeleitet, bitte beziehen Sie sich auf weitere Informationen oder kontaktieren Sie mich, wenn Sie die oben angegebenen Daten nicht verstehen.

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

3
user4993619

IN Swift 3

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

ODER

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

Ich weiß, dass dies von anderen beantwortet wurde, aber ich habe einen anderen Artikel gefunden, der auch ohne Hintergrundereignis behandelt wurde - Tableview oder Scrollview.

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

2
zainoz.zaini

Da die Tags nur iOS sagen, werde ich die Antwort für Swift 1.2 und iOs 8.4 veröffentlichen. Fügen Sie diese in der Swift-Klasse des View-Controllers hinzu:

// 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: -

Vergessen Sie auch nicht, UITextFieldDelegate zur Klassendeklaration hinzuzufügen und den Delegaten Ihrer Textfelder auf self (die Sicht) zu setzen.

2
Juan Boero

So habe ich es getan, um es nach Berühren des Hintergrunds oder Zurückkommens zu verwerfen. Ich musste den Delegate = self in viewDidLoad und dann auch die Delegat-Methoden später in den .m-Dateien hinzufügen. 

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

Zuerst müssen Sie das Textfeld delegete in der .h-Datei hinzufügen. Wenn nicht, deklarieren Sie (BOOL)textFieldShouldReturn:(UITextField *)textField diese Methode nicht aufgerufen wird. Fügen Sie zunächst einen Delegaten hinzu und schreiben Sie Tastatur-Hide-Code in diese Methode.

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

probier diese..

1
Jitendra
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
    if ([obj isKindOfClass:[UITextField class]]) {
        [obj resignFirstResponder];
    }
}];
}

wenn Sie mehr als ein Textfeld im Bildschirm verwenden Bei dieser Methode müssen Sie das Textfeld nicht jedes Mal wie 

[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
0
Harshad

Delegat hinzufügen: UITextFieldDelegate

@interface ViewController : UIViewController <UITextFieldDelegate>

und fügen Sie dann diese Delegatmethode hinzu

// Das sollte perfekt funktionieren

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

Swift 2:

das ist, was getan wurde, um alles zu tun!

schließen Sie die Tastatur mit der Taste Done oder Touch outSide, Next, um zur nächsten Eingabe zu gelangen.

Ändern Sie zunächst TextFile Return Key in Next in StoryBoard.

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

Wenn Sie den aktuellen View-Controller oder die Textansicht nicht kennen, können Sie die Responder-Kette verwenden: 

UIApplication.shared.sendAction(#selector(UIView.endEditing(_:)), to:nil, from:nil, for:nil)
0
coldfire

Verwenden Sie einfach dieses in Objective-C, um die Tastatur zu schließen:

[[UIApplication sharedApplication].keyWindow endEditing:YES];
0
Linc

für Swift 3-4 Ich fixiert gerne 

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    return false
}

kopieren Sie einfach Einfügen an beliebiger Stelle in der Klasse. Diese Lösung funktioniert nur, wenn alle UI-Textfelder gleich funktionieren sollen oder wenn Sie nur eines haben!

0
hall.keskin