Ich habe einige Steuerelemente in vielen Tabellenzellen in meiner Tabelle verteilt, und ich habe mich gefragt, ob es eine einfachere Möglichkeit gibt, die Tastatur zu schließen, ohne alle meine Steuerelemente durchlaufen und sie alle als Ersthelfer zurücktreten zu müssen. Ich denke die Frage ist .. Wie würde ich den aktuellen Ersthelfer auf die Tastatur bringen?
objective-c
cocoa-touch
sdk
Siebziger
quelle
quelle
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
Antworten:
Versuchen:
quelle
[self.view endEditing:YES];
Da die BOOL-Werte in Objective-C JA / NEIN sind.Sie können die aktuell bearbeitete Ansicht zwingen, ihren Ersthelferstatus mit aufzugeben
[view endEditing:YES]
. Dadurch wird die Tastatur ausgeblendet.Im Gegensatz zu
-[UIResponder resignFirstResponder]
,-[UIView endEditing:]
wird durch Subviews suchen die aktuellen Ersthelfer zu finden. Sie können es also an Ihre Ansicht der obersten Ebene senden (z. B.self.view
in aUIViewController
), und es wird das Richtige tun.(Diese Antwort enthielt zuvor einige andere Lösungen, die ebenfalls funktionierten, aber komplizierter waren als erforderlich. Ich habe sie entfernt, um Verwirrung zu vermeiden.)
quelle
[self.view endEditing:YES];
Antwort ist besser.[UIView endediting:]
funktioniert. In einer der von mir entwickelten Apps wurde in UINavigationViewController ein Suchfeld hinzugefügt. Wenn Sie nur[self.view endEditing:YES]
alsself
View Controller aufrufen , funktioniert dies nicht. Stattdessen habe ich diese Methode direkt im Ansichtsbereich aufgerufen, in dem das Suchfeld hinzugefügt wurde. Beispiel:[self.mySearchBoxView endEditing:YES]
.Sie können keine gezielte Aktion an die Anwendung senden. Der Ersthelfer wird jederzeit zurückgetreten, ohne sich Gedanken darüber machen zu müssen, welche Ansicht derzeit den Ersthelferstatus hat.
Ziel c:
Swift 3.0:
Unter Mac OS X sind keine gezielten Aktionen für Menübefehle üblich, und hier ist eine Verwendung für sie unter iOS.
quelle
Um ehrlich zu sein, bin ich nicht verrückt nach den hier vorgeschlagenen Lösungen. Ich habe einen guten Weg gefunden, einen TapGestureRecognizer zu verwenden, der meiner Meinung nach Ihr Problem auf den Punkt bringt: Wenn Sie auf etwas anderes als die Tastatur klicken, schließen Sie die Tastatur.
Registrieren Sie sich in viewDidLoad, um Tastaturbenachrichtigungen zu erhalten, und erstellen Sie einen UITapGestureRecognizer:
Fügen Sie die Tastatur hinzu, um Responder anzuzeigen / auszublenden. Dort fügen Sie den TapGestureRecognizer zur UIView hinzu und entfernen ihn, der die Tastatur beim Tippen schließen soll. Hinweis: Sie müssen es nicht allen Unteransichten oder Steuerelementen hinzufügen.
Der TapGestureRecognizer ruft Ihre Funktion auf, wenn er getippt wird, und Sie können die Tastatur folgendermaßen schließen:
Das Schöne an dieser Lösung ist, dass sie nur nach Taps filtert, nicht nach Swipes. Wenn Sie also einen Bildlaufinhalt über der Tastatur haben, wird durch Wischen immer noch gescrollt und die Tastatur angezeigt. Wenn Sie die Gestenerkennung entfernen, nachdem die Tastatur weg ist, werden zukünftige Tippen auf Ihre Ansicht normal behandelt.
quelle
Dies ist eine Lösung, um die Tastatur zu entfernen, wenn sie
return
in einem Textfeld gedrückt wird, indem Code an einer Stelle hinzugefügt wird (Sie müssen also nicht für jedes Textfeld einen Handler hinzufügen):Betrachten Sie dieses Szenario:
Ich habe ein
viewcontroller
mit zwei Textfeldern (Benutzername und Passwort). und dieviewcontroller
GeräteUITextFieldDelegate
- ProtokollIch mache das in viewDidLoad
und der Viewcontroller implementiert die optionale Methode als
und unabhängig von dem Textfeld, in dem Sie sich befinden
return
, wird es entlassen , sobald ich auf die Tastatur drücke !In Ihrem Fall würde dasselbe funktionieren, solange Sie alle Delegaten des Textfelds auf self setzen und implementieren
textFieldShouldReturn
quelle
Ein besserer Ansatz ist es, den Status eines Ersthelfers zu "stehlen".
Da UIApplication eine Unterklasse von UIResponder ist, können Sie Folgendes versuchen:
Andernfalls erstellen Sie ein neues UITextField mit einem Rahmen mit der Größe Null, fügen Sie es irgendwo einer Ansicht hinzu und führen Sie etwas Ähnliches aus (gefolgt von Rücktritt).
quelle
Verstauen Sie dies in einer Utility-Klasse.
quelle
@Nicholas Riley & @Kendall Helmstetter Geln & @cannyboy:
Absolut brilliant!
Vielen Dank.
In Anbetracht Ihres Ratschlags und des Ratschlags anderer in diesem Thread habe ich Folgendes getan:
Wie es aussieht, wenn es verwendet wird:
[[self appDelegate] dismissKeyboard];
(Hinweis: Ich habe appDelegate als Ergänzung zu NSObject hinzugefügt, damit ich es überall für alles verwenden kann.)Wie es unter der Haube aussieht:
BEARBEITEN
Änderung zu meiner Antwort enthalten
tempTextField.enabled = NO;
. Das Textfeld deaktivieren verhindertUIKeyboardWillShowNotification
undUIKeyboardWillHideNotification
Tastatur - Benachrichtigungen von sollten Sie auf diese Benachrichtigungen in Ihrer App verlassen gesendet werden.quelle
Kurztipp zum Schließen der Tastatur in iOS, wenn ein Benutzer eine beliebige Stelle auf dem Bildschirm außerhalb von UITextField oder Tastatur berührt. In Anbetracht dessen, wie viel Platz die iOS-Tastatur beanspruchen kann, ist es sinnvoll, dass Ihre Benutzer die Tastatur auf einfache und intuitive Weise schließen können.
Hier ist ein Link
quelle
Viele zu komplizierte Antworten hier, vielleicht weil dies in der iOS-Dokumentation nicht leicht zu finden ist. JosephH hatte es direkt oben:
quelle
Noch einfacher als Meagars Antwort
überschreiben
touchesBegan:withEvent:
Dies wird,
dismiss the keyboard
wenn Sie irgendwo in der berührenbackground
.quelle
Folgendes verwende ich in meinem Code. Es wirkt wie ein Zauber!
Fügen Sie in yourviewcontroller.h Folgendes hinzu:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Fügen Sie dies nun in der .m-Datei Ihrer ViewDidLoad-Funktion hinzu:
Fügen Sie diese Funktion auch in die .m-Datei ein:
quelle
<UITextFieldDelegate>
Fügen Sie in der Header-Datei Ihres View-Controllers die Definition der Schnittstelle Ihres Controllers hinzu, damit sie dem UITextField-Delegatenprotokoll entspricht ...... Fügen Sie in der Implementierungsdatei des Controllers (.m) die folgende Methode oder den darin enthaltenen Code hinzu, wenn Sie bereits eine viewDidLoad-Methode haben ...
... Verknüpfen Sie dann Ihre Textbox mit Ihrem eigentlichen Textfeld
quelle
Sie sollten
endEditing:
an das Arbeitsfenster senden , das die Unterklasse von istUIView
quelle
Der beste Weg, um die Tastatur aus UITableView und UIScrollView zu entfernen, sind:
quelle
In Swift 3 können Sie Folgendes tun
quelle
Jeremys Antwort funktionierte für mich nicht ganz, glaube ich, weil ich einen Navigationsstapel in einer Registerkartenansicht mit einem modalen Dialog darüber hatte. Ich verwende gerade Folgendes und es funktioniert für mich, aber Ihr Kilometerstand kann variieren.
quelle
Möglicherweise müssen Sie auch UIViewController disablesAutomaticKeyboardDismissal überschreiben, damit dies in einigen Fällen funktioniert. Dies muss möglicherweise auf dem UINavigationController durchgeführt werden, falls Sie einen haben.
quelle
Unterklassen Sie Ihre Textfelder ... und auch Textansichten
In die Unterklasse geben Sie diesen Code ein ..
In den Textfelddelegierten (ähnlich für Textansichtsdelegierte)
Alles klar. Veröffentlichen Sie jetzt einfach die Benachrichtigung von einer beliebigen Stelle in Ihrem Code. Es wird jede Tastatur zurücktreten.
quelle
Und schnell können wir es tun
quelle
Um eine Tastatur zu schließen, nachdem die Tastatur aufgetaucht ist, gibt es zwei Fälle :
wenn sich das UITextField in einer UIScrollView befindet
wenn sich das UITextField außerhalb einer UIScrollView befindet
2.Wenn sich das UITextField außerhalb einer UIScrollView befindet, überschreiben Sie die Methode in Ihrer UIViewController-Unterklasse
Sie müssen auch einen Delegaten für alle UITextView hinzufügen
Um eine IBAction zu erstellen, drücken Sie Strg + klicken Sie auf die UITapGesture und ziehen Sie sie in die .h-Datei von viewcontroller.
Hier habe ich tappedEvent als meinen Aktionsnamen benannt
Die oben angegebenen Informationen wurden über den folgenden Link abgeleitet. Weitere Informationen erhalten Sie oder kontaktieren Sie mich, wenn Sie die oben angegebenen Daten nicht verstehen.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
quelle
Ich hasse es, dass es keine "globale" Möglichkeit gibt, die Tastatur programmgesteuert zu schließen, ohne private API-Aufrufe zu verwenden. Häufig muss ich die Tastatur programmgesteuert schließen, ohne zu wissen, welches Objekt der Ersthelfer ist. Ich habe versucht, die
self
mithilfe der Objective-C-Laufzeit-API zu überprüfen, alle Eigenschaften aufzulisten, die vom Typ zuUITextField
entfernen und ihnen dieresignFirstResponder
Nachricht zu senden .Es sollte nicht so schwer sein, das zu tun ...
quelle
Es ist nicht schön, aber wie ich den ersten Antwortgeber zurücktrete, wenn ich nicht weiß, was der Antwortende ist:
Erstellen Sie ein UITextField, entweder in IB oder programmgesteuert. Mach es versteckt. Verknüpfen Sie es mit Ihrem Code, wenn Sie es in IB gemacht haben. Wenn Sie dann die Tastatur schließen möchten, schalten Sie den Responder in das unsichtbare Textfeld und geben es sofort auf:
quelle
Sie können Unteransichten rekursiv durchlaufen, ein Array aller UITextFields speichern, diese dann durchlaufen und alle zurücktreten.
Keine wirklich gute Lösung, besonders wenn Sie viele Unteransichten haben, aber für einfache Apps sollte es den Trick tun.
Ich habe dies auf eine viel kompliziertere, aber viel performantere Weise gelöst, aber mit einem Singleton / Manager für die Animations-Engine meiner App, und jedes Mal, wenn ein Textfeld zum Antwortenden wurde, habe ich es einer statischen Zuweisung zugewiesen, die erhalten würde aufgrund bestimmter anderer Ereignisse aufgeräumt (zurückgetreten) ... es ist mir fast unmöglich, dies in einem Absatz zu erklären.
Seien Sie kreativ, ich habe nur 10 Minuten gebraucht, um dies für meine App zu überdenken, nachdem ich diese Frage gefunden habe.
quelle
Eine etwas robustere Methode, die ich kürzlich verwenden musste:
Ich fand, dass einige der anderen "globalen" Methoden nicht funktionierten (zum Beispiel
UIWebView
&WKWebView
weigerte sich, zurückzutreten).quelle
Fügen Sie Ihrer Ansicht einen Tap Gesture Recognizer hinzu. Definieren Sie ihn als Aktion
Ihre .m-Datei wird wie folgt sein
Es hat bei mir funktioniert
quelle
Ja, endEditing ist die beste Option. Und ab iOW 7.0
UIScrollView
gibt es eine coole Funktion, um die Tastatur bei der Interaktion mit der Bildlaufansicht zu schließen. Um dies zu erreichen, können Sie diekeyboardDismissMode
Eigenschaft von festlegenUIScrollView
.Stellen Sie den Tastaturentlassungsmodus wie folgt ein:
Es gibt nur wenige andere Typen. Schauen Sie sich dieses Apfeldokument an .
quelle
In Kürze:
quelle
Der einfachste Weg ist, die Methode aufzurufen
quelle
Sie müssen eine dieser Methoden anwenden:
oder
quelle