Wie verstecke ich die Tastatur, wenn ich in einem UITextField die Eingabetaste drücke?


148

Durch Klicken in ein Textfeld wird die Tastatur angezeigt. Wie verstecke ich es, wenn der Benutzer die Eingabetaste drückt?


13
Das Schöne an Stack Overflow ist, dass bereits VIELE Fragen beantwortet wurden, insbesondere einfache. Suchen Sie daher bitte zuerst nach Antworten, bevor Sie fragen. Sehen Sie, es ist einfach: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

Dies ist eine Unterklasse von UITextfield, die den UIReturnKey dynamisch gemäß der Text- / Zeichenfolgenbedingung
ändert

Antworten:


285

Machen Sie zuerst Ihren Dateidelegierten für UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Fügen Sie diese Methode dann Ihrem Code hinzu.

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

Fügen Sie auch hinzu self.textField.delegate = self;


1
Neugierig, warum ist <UITextFieldDelegate> nicht notwendig? Normalerweise wird in diesem Fall eine Warnung angezeigt.
Pixelfreak

7
Wenn Sie Ihre Datei mit Interface Builder delegieren, ist <UITextFieldDelegate> in der .h-Datei nicht erforderlich.
Saurabh

1
Hinzufügen von <UITextFieldDelegate> in der .h-Datei und Festlegen des Delegaten in viewdidload [yourTextField setDelegate: self]; wird es vervollständigen!
Umit Kaya

@ Saurabh Was ist das Besondere an Storyboard VC?
Paul Brewczynski

62

In viewDidLoaderklären:

[yourTextField setDelegate:self];

Fügen Sie dann die Überschreibung der Delegatenmethode hinzu:

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

6
+1 für die setDelegate:Erinnerung. Auf jeden Fall vergessen und Code funktionierte vorher nicht.
Piperchester

2
Sollte dies nicht textField sein und nicht yourTextField, wie es übergeben wird?
Clive Jefferies

ist eine Art zu sagen, dass der Delegierte Ihres Textes Feld
Oscar Castellon

1
<UITextFieldDelegate> sollte sich in der .h-Datei befinden, sonst wird eine Warnung angezeigt!
Umit Kaya

22

Versuchen Sie dies in Swift ,

Schritt 1: Legen Sie den Delegaten als Selbst für Ihren festtextField

textField.delegate = self

Schritt 2: Fügen Sie dieses UITextFieldDelegate unter Ihrer Klassendeklaration hinzu.

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

Machen Sie in Kürze Folgendes:
Zuerst in Ihrem ViewControllerGerät wird dies UITextFieldDelegate z.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Fügen Sie nun einen Delegaten zu einem hinzu, TextFieldin dem Sie die Tastatur schließen möchten, wenn die Eingabetaste entweder in der folgenden viewDidLoadMethode oder dort, wo Sie sie initialisieren, getippt wird. Zum Beispiel.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Fügen Sie nun diese Methode hinzu.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
Der zweite Schritt ist nicht erforderlich, wenn Sie den Delegaten in IB festlegen.
Bis zum

Erscheint (in aktuellen Versionen von Swift) sollte vor "textField:" ein Unterstrich stehen
Bryce Sandlund

2

Versuche dies,

[textField setDelegate: self];

Dann in der textField-Delegatmethode

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

Das ist nicht die beste Vorgehensweise, um das zu tun.
orafaelreis

benötigt UITextFieldDelegate in der Schnittstellendefinition.
Alp Altunel

@AlpAltunel: Danke für den Kommentar, es war vor 4 Jahren.
Vineesh TP

1

Setzen Sie den Delegaten der Methode UITextFieldund überschreiben Sie textFieldShouldReturndiese Methode. Schreiben Sie in dieser Methode einfach die folgenden zwei Zeilen:

[textField resignFirstResponder];
return YES;

das ist es. Vergessen Sie vor dem Schreiben eines Codes nicht, den Delegaten von a festzulegen UITextFieldund den Return-Schlüsseltyp im Eigenschaftenfenster auf "Fertig" zu setzen (Befehl + Umschalt + I).


1

Sie können "Primary Action Triggered" (Rechtsklick auf UITextField) mit einer IBAction verbinden und den Ersthelfer (ohne Delegierung) zurücktreten. Beispiel (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Bevorzugte Methode bei Verwendung von Storyboards.
lal

1

Swift 4

Legen Sie den Delegaten des UITextFieldIn-View-Controllers fest field.delegate = selfund dann:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

Wie würden Sie damit umgehen, dass Benutzer mit einem Druck auf die nächste Eingabetaste zum nächsten Textfeld wechseln sollen, bis zum letzten und dann zurücktritt? Auch in SwiftUI.
Learn2Code

@ Learn2Code erstelle einen Manager, sammle Textfelder und verkette, der letzte löst die Finish-Funktion aus.
Dimpiax

1

Wenn Sie die Tastatur für eine bestimmte Tastatur [self.view resignFirstResponder]; ausblenden möchten, verwenden Sie Wenn Sie eine Tastatur aus der Ansichtsausblendung ausblenden möchten[self.view endEditing:true];



0

Ok, ich denke für einen Anfänger könnten die Dinge etwas verwirrend sein. Ich denke, die richtige Antwort ist eine Mischung aus all dem, zumindest in Swift4.

Erstellen Sie entweder eine Erweiterung oder verwenden Sie den ViewController, in dem Sie diese verwenden möchten, stellen Sie jedoch sicher, dass Sie UITextFieldDelegate implementieren. Aus Gründen der Wiederverwendbarkeit fand ich es einfacher, eine Erweiterung zu verwenden:

extension UIViewController : UITextFieldDelegate {
    ...
}

aber die Alternative funktioniert auch:

class MyViewController: UIViewController {
    ...
}

Fügen Sie die Methode textFieldShouldReturn hinzu (abhängig von Ihrer vorherigen Option, entweder in der Erweiterung oder in Ihrem ViewController).

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

Setzen Sie in Ihrer viewDidLoad-Methode den Delegaten des Textfelds auf self

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Das sollte alles sein. Wenn Sie jetzt drücken returndie textFieldShouldReturnaufgerufen werden soll.


0

Definieren Sie diese Klasse und stellen Sie dann Ihr Textfeld so ein, dass die Klasse verwendet wird. Dadurch wird die gesamte ausgeblendete Tastatur automatisiert, wenn die Eingabetaste automatisch gedrückt wird.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        textField.resignFirstResponder()
        return true
    }

}

Dann müssen Sie im Storyboard nur noch die Felder festlegen, um die Klasse zu verwenden:

Geben Sie hier die Bildbeschreibung ein

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.