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?
Antworten
Zu viele Anzeigen?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).
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];
}
}
@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.
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