383 Stimmen

Einfacher Weg, die Tastatur zu verwerfen?

Ich habe eine ganze Reihe von Steuerelementen, die über viele Tabellenzellen in meiner Tabelle verstreut sind, und ich frage mich, ob es einen einfacheren Weg gibt, die Tastatur zu deaktivieren, ohne alle meine Steuerelemente in einer Schleife durchlaufen zu müssen und sie alle als erste Antwort zurücktreten zu lassen. Ich schätze, die Frage ist: Wie würde ich den aktuellen ersten Responder auf die Tastatur bekommen?

14voto

Ein besserer Ansatz ist es, etwas zu haben, das den Status eines Ersthelfers "stiehlt".

Da UIApplication eine Unterklasse von UIResponder ist, könnten Sie es versuchen:

[[UIApplication sharedApplication] becomeFirstResponder]
[[UIApplication sharedApplication] resignFirstResponder]

Wenn das nicht möglich ist, erstellen Sie ein neues UITextField mit einem Rahmen der Größe Null, fügen Sie es irgendwo in eine Ansicht ein und tun Sie etwas Ähnliches (become followed by resign).

8voto

lorean Punkte 2140

Verstecken Sie dies in einer Utility-Klasse.

+ (void)dismissKeyboard {
    [self globalResignFirstResponder];
}

+ (void) globalResignFirstResponder {
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    for (UIView * view in [window subviews]){
        [self globalResignFirstResponderRec:view];
    }
}

+ (void) globalResignFirstResponderRec:(UIView*) view {
    if ([view respondsToSelector:@selector(resignFirstResponder)]){
        [view resignFirstResponder];
    }
    for (UIView * subview in [view subviews]){
        [self globalResignFirstResponderRec:subview];
    }
}

6voto

Jeremy Punkte 8714

@Nicholas Riley & @Kendall Helmstetter Geln & @cannyboy:

Absolut genial!

Ich danke Ihnen.

Unter Berücksichtigung Ihrer Ratschläge und der Ratschläge anderer in diesem Thread habe ich Folgendes getan:

So sieht es aus, wenn es benutzt wird:

[[self appDelegate] dismissKeyboard]; (Hinweis: Ich habe appDelegate als Zusatz zu NSObject hinzugefügt, so dass ich überall auf alles verwenden kann)

Wie es unter der Haube aussieht:

- (void)dismissKeyboard 
{
    UITextField *tempTextField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
    tempTextField.enabled = NO;
    [myRootViewController.view addSubview:tempTextField];
    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
}

EDITAR

Änderungsantrag zu meiner Antwort zu enthalten tempTextField.enabled = NO; . Die Deaktivierung des Textfeldes verhindert UIKeyboardWillShowNotification y UIKeyboardWillHideNotification Tastatur-Benachrichtigungen zu verhindern, wenn Sie sich in Ihrer Anwendung auf diese Benachrichtigungen verlassen.

5voto

Ian Wilkinson Punkte 51

Eine Menge von übermäßig komplizierte Antworten hier, vielleicht, weil dies nicht einfach in der iOS-Dokumentation zu finden ist. JosephH hatte es oben richtig:

[[view window] endEditing:YES];

5voto

Armen Punkte 51

Kurzer Tipp, wie die Tastatur in iOS ausgeblendet werden kann, wenn ein Benutzer eine Stelle auf dem Bildschirm außerhalb des UITextFields oder der Tastatur berührt. Wenn man bedenkt, wie viel Platz die iOS-Tastatur einnehmen kann, ist es sinnvoll, eine einfache und intuitive Möglichkeit zu haben, um die Tastatur zu deaktivieren.

Hier ist eine Verbindung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X