Ich weiß, dass ich meinem UITextField mitteilen muss, dass der Ersthelfer zurücktreten soll, wenn ich die Tastatur deaktivieren möchte, aber ich bin nicht sicher, wie ich wissen soll, wann der Benutzer die Taste "Fertig" auf der Tastatur gedrückt hat. Gibt es eine Benachrichtigung, auf die ich achten kann?
181
Antworten:
Ich setze den Delegierten der
UITextField
in meineViewController
Klasse.In dieser Klasse habe ich diese Methode wie folgt implementiert:
quelle
NO
stattYES
?NO
vermeiden Sie, dem Text eine Zeilenrückgabe hinzuzufügen.Wenn Sie das DidEndOnExit-Ereignis des Textfelds mit einer Aktion (IBAction) in InterfaceBuilder verbinden, wird eine Nachricht gesendet, wenn der Benutzer die Tastatur schließt (mit der Eingabetaste) und der Absender ein Verweis auf das UITextField ist, das das Ereignis ausgelöst hat.
Beispielsweise:
Verknüpfen Sie dann in InterfaceBuilder das DidEndOnExit-Ereignis des Textfelds mit dieser Aktion auf Ihrem Controller (oder was auch immer Sie zum Verknüpfen von Ereignissen über die Benutzeroberfläche verwenden). Immer wenn der Benutzer Text eingibt und das Textfeld schließt, wird dem Controller diese Nachricht gesendet.
quelle
Sie können auch eine Methode in Ihrem Controller erstellen
und dann im Verbindungsinspektor in IB das Ereignis "Did End On Exit" damit verbinden.
quelle
DidEndOnExit
Veranstaltung abonnieren , müssen Sie nicht anrufenresignFirstResponder
. Sie können dies testen, indem Sie einen symbolischen Haltepunkt setzen[UIResponder resignFirstResponder]
. Beachten Sie, dass auch wenn Sie resignFirstResponder nicht aufrufen, es vom System aufgerufen wird. Dies wird in Matt Neuburgs hervorragenden Büchern erklärt: apeth.com/iOSBook/…Kubi, danke. Ihr Code hat funktioniert. Nur explizit zu sein (für Neulinge mögen) , wie Sie sagen , dass Sie die eingestellte müssen
UITextField
‚sdelegate
auf die Viewcontroller , in dem das Textfeld wohnt gleich sein. Sie können dies tun, wo immer Sie möchten. Ich habe dieviewDidLoad
Methode gewählt.quelle
delegate
. Sie müssen dies nicht programmgesteuert tun, wie oben gezeigt. Jeder Ansatz funktioniert gut.Hier ist ein Trick, um ein automatisches Tastaturentlassungsverhalten ohne Code zu erhalten. Bearbeiten Sie in der Schreibfeder das First-Responder-Proxy-Objekt im Identitätsinspektor und fügen Sie eine neue First-Responder-Aktion hinzu. Nennen wir es
dummy:
. Verknüpfen Sie nun das Ereignis Did End on Exit des Textfelds mit derdummy:
Aktion des First Responder-Proxy-Objekts. Das ist es! Da das Ereignis Did End on Exit des Textfelds jetzt ein Aktions-Ziel-Paar enthält, wird die Tastatur des Textfelds automatisch geschlossen, wenn der Benutzer auf Return tippt. und da es keine Strafe gibt, wenn kein Handler für eine Nachricht gefunden wird, die über die Responderkette gesendet wird, stürzt die App nicht ab, obwohldummy:
nirgendwo eine Implementierung vorhanden ist.quelle
Einfach hinzufügen
Hier möchten Sie die Tastatur deaktivieren und die Auswahlansicht anzeigen.
quelle
In Swift können Sie eine IBAction in den Controller schreiben und das Ereignis Did End On Exit des Textfelds auf diese Aktion setzen
quelle
Swift 4.2
und es wird 100% funktionierenquelle
Sie können auch verwenden
Am besten, wenn Sie viele Uitextfelder haben:
quelle
Folgendes musste ich tun, damit es funktioniert, und ich denke, dass dies für jeden erforderlich ist, der einen Nummernblock für eine Tastatur hat (oder für andere ohne eine Schaltfläche "Fertig":
Ich habe eine Funktion namens erstellt
Dies wurde auch in der .h-Datei definiert.
Danach habe ich im Interface Builder eine Verknüpfung zum Touchdown-Bit für den ViewController hergestellt.
In die Funktion 'Hintergrund wird getippt' habe ich Folgendes eingefügt:
Denken Sie daran, 'answerField' in den Namen des UITextField zu ändern, von dem Sie die Tastatur entfernen möchten (stellen Sie natürlich sicher, dass Ihr UITextField wie unten definiert ist :)
Ich weiß, dass dieses Thema wahrscheinlich vor langer Zeit gestorben ist ... aber ich hoffe, dass dies irgendwo jemandem hilft!
quelle
Sie werden feststellen, dass die Methode "textFieldShouldReturn" das Textfeldobjekt bereitstellt, das die Taste DONE gedrückt hat. Wenn Sie den TAG einstellen, können Sie dieses Textfeld einschalten. Oder Sie können den Zeiger des Objekts verfolgen und mit einem vom Ersteller gespeicherten Elementwert vergleichen.
Mein Ansatz für ein Selbststudium ist wie folgt:
In der Zwischenzeit habe ich den "Validierungstest" durchgeführt, der den folgenden Rücktritt leugnet. Es dient nur zur Veranschaulichung. Wenn der Benutzer also NO! in das Feld wird es nicht entlassen. Das Verhalten war wie ich wollte, aber die Reihenfolge der Ausgabe war nicht wie ich erwartet hatte.
Es folgt meine NSLog-Ausgabe für diese Ablehnung, gefolgt von der Annahme. Sie werden feststellen, dass ich das Ergebnis des Rücktritts zurücksende, aber ich habe erwartet, dass es FALSE an mich zurücksendet, um dem Anrufer Bericht zu erstatten?! Davon abgesehen hat es das notwendige Verhalten.
quelle
Hier ist eine recht saubere Möglichkeit, die Ausgabe mit der Eingabetaste oder einer Berührung im Hintergrund zu beenden.
Betten Sie im Interface Builder Ihre Felder in eine Ansicht der Klasse UIFormView ein
Was macht diese Klasse:
Hier ist der Code:
Schnittstelle
Implementierung
Durch Unterklassen des Formulars und Überschreiben der
textFieldValueIsValid:
Methode können Sie das Ende der Ausgabe vermeiden, wenn der Wert für das angegebene Feld nicht korrekt ist.Wenn für ein Feld in Interface Builder ein Delegat festgelegt ist, ändert das Formular dies nicht. Ich sehe nicht viele Gründe, einen anderen Delegierten für ein bestimmtes Feld zu bestimmen, aber warum nicht ...
Es gibt viele Möglichkeiten, diese Formularansichtsklasse zu verbessern: Fügen Sie einen Delegaten hinzu, führen Sie ein Layout durch, behandeln Sie, wenn die Tastatur ein Feld abdeckt (unter Verwendung des aktuellen EditingTextField-Rahmens), starten Sie die Edition automatisch für das nächste Feld, ...
Ich persönlich behalte es in meinem Framework und unterteile es immer, um Funktionen hinzuzufügen. Es ist ziemlich oft nützlich, "wie es ist".
Ich hoffe es wird helfen. Prost alle
quelle
Wenn Sie alle Bearbeitungen in einem UIViewController durchführen möchten, können Sie diese verwenden.
und wenn Sie eine bestimmte UITextField-Tastatur ausblenden möchten, verwenden Sie.
1.add delegate in your viewcontroller.h
Deaktivieren Sie die Delegierung für Ihr Textfeld.
self.yourTextField.delegate = self;
Fügen Sie diese Methode Ihrem Viewcontroller hinzu.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; JA zurückgeben;}
quelle
Setzen Sie den Delegaten des UITextField programmgesteuert auf Swift 3
Implementieren Sie UITextFieldDelegate in Ihrer ViewController.Swift-Datei (z. B. Klasse ViewController: UIViewController, UITextFieldDelegate {)
// Mark: - Umgang mit delegierten TextField ..
quelle
Erstellen Sie eine Funktion hidekeyboard, verknüpfen Sie sie mit dem Textfeld in der .xib-Datei und wählen Sie DidEndOnExit aus
quelle
Wenn Sie die Ansicht mit dem Interface Builder erstellt haben, verwenden Sie Folgendes: Erstellen Sie einfach eine Methode:
Klicken Sie einfach mit der rechten Maustaste auf das Textfeld in der Ansicht, setzen Sie das Ereignis als "Beim Beenden beendet" und verbinden Sie es mit der Methode "acceptKeyboard".
Der beste Leitfaden für Anfänger ist "Head First iPhone- und iPad-Entwicklung, 2. Ausgabe".
quelle
Versuche dies
quelle
quelle
Wer Swift 3 sucht
1) Stellen Sie sicher, dass der Delegat Ihres UITextField mit Ihrem ViewController im Storyboard verbunden ist
2) Implementieren Sie UITextFieldDelegate in Ihrer ViewController.Swift-Datei (z. B. Klasse ViewController: UIViewController, UITextFieldDelegate {)
3) Verwenden Sie die unten stehende Delegate-Methode
quelle
So entlasse ich die Tastatur in Swift 4.2 und es funktioniert für mich:
quelle
Swift 3, iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: Es funktioniert immer noch gut für mich. Ich denke, der Typ, der diese Antwort gewidmet hat, hat einfach nicht verstanden, dass er diese Aktion an das UITextField im Storyboard binden muss.
quelle
quelle