Wie entlasse ich die iOS-Tastatur?


74

Ich habe ein UITextfield, für das ich die Tastatur schließen möchte. Ich kann nicht scheinen, die Tastatur verschwinden zu lassen, egal welchen Code ich benutze.

Antworten:



192

Wenn Sie mehrere Textfelder haben und nicht wissen, welches der Ersthelfer ist (oder Sie einfach keinen Zugriff auf die Textfelder haben, von wo aus Sie diesen Code schreiben), können Sie endEditing:die übergeordnete Ansicht mit den Textfeldern aufrufen .

In der Methode eines View Controllers würde dies folgendermaßen aussehen:

[self.view endEditing:YES];

Der Parameter zwingt das Textfeld, den Ersthelferstatus aufzugeben. Wenn Sie einen Delegaten zur Durchführung der Validierung verwendet haben und alles anhalten möchten, bis der Inhalt des Textfelds gültig ist, können Sie es auch folgendermaßen codieren:

BOOL didEndEditing = [self.view endEditing:NO];
if (didEndEditing) {
    // on to the next thing...
} else {
    // text field must have said to first responder status: "never wanna give you up, never wanna let you down"
}

Das endEditing: Methode ist viel besser, als einzelne Textfelder zu informieren resignFirstResponder, aber aus irgendeinem Grund habe ich bis vor kurzem noch nie davon erfahren.


71
Verdammt! Ich kann nicht glauben, dass ich gerade in einem Codekommentar überrollt wurde.
Lytol

8

Es gibt Fälle, in denen kein Textfeld der Ersthelfer ist aber die Tastatur auf dem Bildschirm angezeigt wird. In diesen Fällen können die oben genannten Methoden die Tastatur nicht schließen.

Ein Beispiel, wie man dorthin kommt:

  1. Drücken Sie den ABPersonViewController programmgesteuert auf den Bildschirm. Öffne jeden Kontakt.
  2. Berühren Sie das Feld "Notiz" (das zum Ersthelfer wird und die Tastatur startet).
  3. Wischen Sie in einem anderen Feld nach links, um die Schaltfläche "Löschen" anzuzeigen.
  4. Zu diesem Zeitpunkt haben Sie keinen Ersthelfer unter den Textfeldern (nur programmgesteuert prüfen), aber die Tastatur ist noch vorhanden. Das Aufrufen von [view endEditing: YES] bewirkt nichts.

In diesem Fall müssen Sie auch den View Controller bitten, den Bearbeitungsmodus zu verlassen:

[viewController setEditing:NO animated:YES];

8

Ich habe einen Fall entdeckt, in dem endEditingundresignFirstResponder scheitern. Das hat in diesen Fällen bei mir funktioniert.

ObjC

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];    
[self setEditing:NO];

Schnell

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

Genau das, wonach ich gesucht habe!
Hola Soja Edu Feliz Navidad

6

Ich schlage vor, dass Sie Ihre Header-Datei hinzufügen und bearbeiten:

-(IBAction)removeKeyboard;

Und schreiben Sie in der Implementierung so etwas:

-(IBAction)removeKeyboard
{
[self.textfield resignFirstResponder];
}

Stellen Sie in der NIB-Datei über die Option DidEndOnExit eine Verbindung von UITextFiled zum Eigentümer der Datei her. Auf diese Weise verschwindet die Tastatur, wenn Sie die Eingabetaste drücken.

Ich hoffe es hilft!


6

Stellen Sie in Ihrer View Controller YourViewController.h-Datei sicher, dass Sie das UITextFieldDelegate-Protokoll implementieren:

@interface YourViewController : <UITextFieldDelegate>

@end

Implementieren Sie dann in der Datei YourViewController.m die folgende Instanzmethode:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.yourTextField1 resignFirstResponder];
    [self.yourTextField2 resignFirstResponder];
    ...
    [self.yourTextFieldn resignFirstResponder];
}

3

Dadurch wird ein bestimmtes Textfeld zurückgesetzt

// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

Um ein Textfeld zu verlassen, verwenden Sie den folgenden Code

// Swift
self.view!.endEditing(true)

// Objective C
[self.view endEditing:YES];

3

So geben Sie ein Textfeld in der App zurück

UIApplication.shared.keyWindow?.endEditing(true)

Dieser Ansatz ist sauber und funktioniert garantiert, da das keyWindow per Definition die Stammansicht aller möglichen Ansichten ist, in denen eine Tastatur ( Quelle ) angezeigt wird :

Das Tastenfenster empfängt Tastatur- und andere nicht berührungsbezogene Ereignisse. Es kann jeweils nur ein Fenster das Schlüsselfenster sein.


3

als letztes Mittel 💩

let dummyTextView = UITextView(frame: .zero)
view.addSubview(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()
dummyTextView.removeFromSuperview()

Ich hatte eine Benutzeroberfläche, in der ich eine UITextFieldErsthelferin hatte, aber ein Popover mit Vorschlägen, die ebenfalls aktiv waren. Durch Schließen der Tastatur mit der Schaltfläche "Ausblenden" wurde die Tastatur nicht ausgeblendet. Dieser Code hat mir hier geholfen, danke! :)
fl034

2

Wenn Sie nicht wissen, welches textField der Ersthelfer ist, können Sie es finden. Ich benutze diese Funktion:

UIView *resignFirstResponder(UIView *theView)
{
    if([theView isFirstResponder])
    {
        [theView resignFirstResponder];
        return theView;
    }
    for(UIView *subview in theView.subviews)
    {
        UIView *result = resignFirstResponder(subview);
        if(result) return result;
    }
    return nil;
}

Dann in Ihrem Code-Aufruf:

    UIView *resigned = resignFirstResponder([UIScreen mainScreen]);

1

Sie ersetzen nur durch yourTextFieldName, Sie haben es erraten! Ihr Textfeld. Dadurch wird die Tastatur geschlossen.

[yourTextFieldName resignFirstResponder];

1
-(void)methodName
{
    [textFieldName resignFirstResponder];
}

Rufen Sie diese Methode (methodName) mit didEndOnExit auf


1

Für Swift 3

Sie können die Tastatur folgendermaßen ausblenden:

textField.resignFirstResponder()

Wenn Sie die Tastatur ausblenden möchten, wenn der Benutzer die "Intro" -Taste drückt, müssen Sie die folgende UITextFieldDelegateMethode implementieren :

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

    textField.resignFirstResponder()

    return true
}

0
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    // your code

    [textField reloadInputViews];
}

0

3 einfache und schnelle Schritte

Fügen Sie UITextFieldDelegateIhrer Klasse wie folgt hinzu:

class RegisterVC: UIViewController, UITextFieldDelegate {
    //class implementation 
}

Fügen Sie in der Klassenimplementierung die Delegatenfunktion hinzu textFieldShouldEndEditing::

internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return true
}

und als letzten Schritt setzen Sie Ihre UITextField(n) Delegierte (n) an einem geeigneten Ort auf sich selbst. Zum Beispiel innerhalb der viewDidLoadFunktion:

override func viewDidLoad(){
    super.viewDidLoad()
    myTextField1.delegate = self
    myTextField2.delegate = self
    ..
    ..
}

Wenn der Benutzer die Eingabetaste drückt, wird die Tastatur geschlossen.

Ich bereitete auch ein Beispiel Schnipsel, können Sie es aus überprüfen hier .


-1
  1. Richten Sie das Ereignis "Did End On Exit" in Xcode ein (klicken Sie mit der rechten Maustaste auf Ihr Textfeld).

    Bildschirmfoto

  2. Verwirklichen Sie diese Methode:

    -(IBAction) closeKeyboard:(id) sender {
        [_txtField resignFirstResponder];
    }
    
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.