it-swarm.com.de

Wie kann ich die iOS-Tastatur schließen?

Ich habe ein UITextfeld, für das ich die Tastatur verwerfen möchte. Ich kann die Tastatur nicht weglassen, egal welchen Code ich verwende.

73
Tyler McMaster
[myTextField resignFirstResponder]

Here , zweiter Absatz im Abschnitt Anzeigen und Ausblenden der Tastatur.

62
Evan Mulawski

Wenn Sie über mehrere Textfelder verfügen und nicht wissen, welcher der Ersthelfer ist (oder Sie einfach keinen Zugriff auf die Textfelder haben, wo auch immer Sie diesen Code schreiben), können Sie endEditing: in der übergeordneten Ansicht mit den Textfeldern aufrufen.

In einer View-Controller-Methode würde es so aussehen:

[self.view endEditing:YES];

Der Parameter zwingt das Textfeld dazu, den Status des ersten Responders abzulehnen. Wenn Sie einen Delegaten für die Validierung verwendet haben und alles stoppen möchten, bis der Inhalt des Textfelds gültig ist, können Sie ihn 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"
}

Die endEditing:-Methode ist viel besser, als resignFirstResponder einzelne Textfelder mitzuteilen, aber aus irgendeinem Grund habe ich bis vor kurzem nie darüber erfahren.

188
benzado

Es gibt Fälle, in denen kein Textfeld der Ersthelfer ist die Tastatur jedoch auf dem Bildschirm angezeigt wird .. In diesen Fällen können die obigen Methoden die Tastatur nicht verwerfen.

Ein Beispiel wie man dorthin kommt:

  1. Drücken Sie den ABPersonViewController programmgesteuert auf dem Bildschirm. jeden Kontakt öffnen;
  2. berühren Sie das "Note" -Feld (das zum Ersthelfer wird und die Tastatur hochfährt). 
  3. wischen Sie nach links in einem anderen Feld, 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 immer noch vorhanden. Durch Aufruf von [view endEditing: YES] wird nichts ausgeführt.

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

[viewController setEditing:NO animated:YES];
8
user2216794

Ich habe einen Fall entdeckt, bei dem endEditing und resignFirstResponder fehlschlagen. Das hat in diesen Fällen für mich 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)
6
Andres Canella

Stellen Sie sicher, dass Sie in der Datei YourViewController.h Ihres View-Controllers das Protokoll UITextFieldDelegate 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];
}
6
Thomas.Benz

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

-(IBAction)removeKeyboard;

Und schreibe bei der Implementierung so etwas:

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

Stellen Sie in der NIB-Datei eine Verbindung von UITextFiled mit dem Eigentümer der Datei für die Option DidEndOnExit her. Wenn Sie die Eingabetaste drücken, wird die Tastatur ausgeblendet. 

Ich hoffe es hilft!

6
naSh

Dadurch wird ein bestimmtes Textfeld zurückgesetzt 

// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

Verwenden Sie den folgenden Code, um ein Textfeld zurückzusetzen 

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

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

Wenn Sie nicht wissen, welcher textField der erste Responder ist, können Sie ihn 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]);
2
BadPirate

So geben Sie ein Textfeld in der App zurück

UIApplication.shared.keyWindow?.endEditing(true)

Dieser Ansatz ist sauber und garantiert, da das keyWindow definitionsgemäß die Stammansicht aller möglichen Ansichten ist, die eine Tastatur anzeigen ( source ):

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

2
Cœur
-(void)methodName
{
    [textFieldName resignFirstResponder];
}

rufen Sie diese Methode (Methodenname) mit didEndOnExit auf

1
Pravi Jay

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 Schaltfläche "Intro" drückt, müssen Sie die folgende UITextFieldDelegate-Methode implementieren:

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

    textField.resignFirstResponder()

    return true
}
1
pableiros

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

[yourTextFieldName resignFirstResponder];
1
A.sharif

als letzter Ausweg ????

let dummyTextView = UITextView(frame: .zero)
view.addSubView(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()
1
ochimasu

3 einfache und schnelle Schritte

Fügen Sie UITextFieldDelegate Ihrer Klasse wie folgt hinzu:

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

fügen Sie in der Klassenimplementierung die Delegatfunktion textFieldShouldEndEditing: hinzu:

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

als letzten Schritt setzen Sie Ihren UITextField (s) -Delegierten auf sich selbst, irgendwo an einer geeigneten Stelle. Zum Beispiel in der viewDidLoad-Funktion:

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

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

Ich habe auch ein Beispiel-Snippet vorbereitet, Sie können es von hier überprüfen.

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

    [textField reloadInputViews];
}
0
jeet.chanchawat