UITextField - Capture Return Button Event

101

Wie kann ich erkennen, wenn ein Benutzer während der Bearbeitung von UITextField die Tastaturtaste "Zurück" gedrückt hat? Ich muss dies tun, um die Tastatur zu schließen, wenn der Benutzer die "Zurück" -Taste gedrückt hat.

Vielen Dank.

Ilya Suzdalnitski
quelle

Antworten:

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

Vergessen Sie nicht, den Delegaten in das Storyboard zu setzen ...

Geben Sie hier die Bildbeschreibung ein

Ilya Suzdalnitski
quelle
47
Stellen Sie sicher, dass Ihr Ansichts-Controller als Delegat des Textfelds festgelegt ist.
Zekel
1
Danke dir. Für mich habe ich den Delegierten über eingestellt self.yourTextField.delegate = self;. Auch mehrere Textfelder funktionieren.
Haxpor
@Praxiteles Dies kann jetzt im Storyboard durchgeführt werden, ohne dass eine Delegierung erforderlich ist. Bitte überprüfen Sie die Antwort unten.
Blake Lockley
51

Eine Delegation ist nicht erforderlich. Hier ist ein Einzeiler:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

Leider können Sie dies nicht direkt in Ihrem Storyboard tun (Sie können keine Aktionen mit dem Steuerelement verbinden, das sie in Storyboard ausgibt), aber Sie können dies über eine Zwischenaktion tun.

mxcl
quelle
1
Ich möchte nur darauf hinweisen, dass das UIControlEventEditingDidEndOnExitEreignis nur gesendet wird, wenn die textFieldShouldReturn:Delegatmethode YES zurückgibt (ohne das Textfeld vorher zu verlassen).
Alex-I
Sie müssen nicht haben , um eine Delegation zu implementieren. Aber wenn Sie dies tun, müssen Sie möglicherweise YESfür diese Methode zurückkehren.
mxcl
9

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

Geben Sie in der Funktion enterPressed () alle Verhaltensweisen ein, nach denen Sie suchen

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}
drpawelo
quelle
8

Sie können dies jetzt als Storyboard mit dem gesendeten Ereignis 'Did End On Exit' tun.

In Ihrer View Controller-Unterklasse:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

In Ihrem Storyboard für das gewünschte Textfeld:

Geben Sie hier die Bildbeschreibung ein

Blake Lockley
quelle
Dies ist jetzt die richtige Antwort.
Psiloc
3

Schnelle Version mit UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}
Leo Dabus
quelle
2

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)
Ted
quelle
-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Wenn Sie auf die Eingabetaste klicken, wird diese Delegatmethode aufgerufen. Sie können die Rückgabeschaltfläche von dieser Delegatmethode erfassen.

Mahendra Vishwakarma
quelle