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?Um eine Tastatur zu deaktivieren, nachdem die Tastatur eingeblendet wurde, gibt es folgende Möglichkeiten 2 Fälle ,
-
wenn das UITextField innerhalb einer UIScrollView
-
wenn das UITextField außerhalb einer UIScrollView
2.wenn das UITextField außerhalb einer UIScrollView liegt überschreiben Sie die Methode in Ihrer UIViewController-Unterklasse
müssen Sie auch Delegaten für alle UITextView hinzufügen
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
- In einem Scroll-Ansicht, Tippen außerhalb wird kein Ereignis ausgelöst in diesem Fall also einen Tipp-Gesten-Erkenner verwenden , Ziehen und Ablegen einer UITapGesture für die Bildlaufansicht und eine IBAction für sie erstellen .
um eine IBAction zu erstellen, drücken Sie ctrl+klick auf die UITapGesture und ziehen Sie sie in die .h Datei des viewcontrollers.
Hier habe ich tappedEvent als meinen Aktionsnamen angegeben
- (IBAction)tappedEvent:(id)sender {
[self.view endEditing:YES]; }
die angegebenen Informationen stammen aus dem folgenden Link, bitte lesen Sie für weitere Informationen oder kontaktieren Sie mich, wenn Sie die Daten nicht verstehen.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
Eine etwas robustere Methode, die ich kürzlich anwenden musste:
- (void) dismissKeyboard {
NSArray *windows = [UIApplication sharedApplication].windows;
for(UIWindow *window in windows) [window endEditing:true];
// Or if you're only working with one UIWindow:
[[UIApplication sharedApplication].keyWindow endEditing:true];
}
Ich habe festgestellt, dass einige der anderen "globalen" Methoden nicht funktionieren (zum Beispiel, UIWebView
& WKWebView
sich weigerte, zurückzutreten).
Fügen Sie einen Tap Gesture Recognizer zu Ihrer Ansicht hinzu und definieren Sie ihn ibaction
Ihre .m-Datei sieht dann so aus
- (IBAction)hideKeyboardGesture:(id)sender {
NSArray *windows = [UIApplication sharedApplication].windows;
for(UIWindow *window in windows) [window endEditing:true];
[[UIApplication sharedApplication].keyWindow endEditing:true];
}
Es hat bei mir funktioniert
Sie können rekursiv durch die Unteransichten iterieren, ein Array aller UITextFields speichern und dann eine Schleife durch sie ziehen und sie alle zurücktreten lassen.
Das ist nicht wirklich eine gute Lösung, vor allem wenn Sie viele Unteransichten haben, aber für einfache Anwendungen sollte es reichen.
Ich löste dies in eine viel kompliziertere, aber viel mehr performant Weg, aber mit einem Singleton/Manager für die Animation-Engine meiner app, und jedes Mal ein Textfeld wurde der Responder, ich würde es zuweisen, eine statische, die erhalten würde gefegt (zurückgetreten) basierend auf bestimmte andere Ereignisse ... seine fast unmöglich für mich in einem Absatz zu erklären.
Seien Sie kreativ, ich habe nur 10 Minuten gebraucht, um mir das für meine App zu überlegen, nachdem ich diese Frage gefunden hatte.