Ich versuche zu überprüfen, wann sich ein Textfeld ändert, was auch der für textView verwendeten Funktion entspricht. textViewDidChange
Bisher habe ich Folgendes getan:
func textFieldDidBeginEditing(textField: UITextField) {
if self.status.text == "" && self.username.text == "" {
self.topRightButton.enabled = false
} else {
self.topRightButton.enabled = true
}
}
Welche Art von funktioniert, aber das topRightButton
ist aktiviert, sobald das Textfeld gedrückt wird. Ich möchte, dass es nur aktiviert wird, wenn tatsächlich Text eingegeben wird?
ios
swift
uitextfield
Boraseoksoon
quelle
quelle
viewDidLoad
. Die Aktion ist Buchstabe für Buchstabe gleich. Die App stürzt ab, sobald eine Tastaturtaste gedrückt wird. Edit: Hab es herausgefunden! Es fehlte das Semikolon in der Aktion. Ich nahm an, dass es nur mit dem Funktionsnamen identisch sein musste.Sie können diese Verbindung im Interface Builder herstellen.
Klicken Sie in Ihrem Storyboard oben auf dem Bildschirm auf den Assistenten-Editor (zwei Kreise in der Mitte).
Strg + Klicken Sie im Interface Builder auf das Textfeld.
Ziehen Sie von EditingChanged in Ihre Ansichtssteuerungsklasse in der Assistentenansicht.
Benennen Sie Ihre Funktion (z. B. "textDidChange") und klicken Sie auf Verbinden.
quelle
Swift 5.0
und Handle-Methode:
Swift 4.0
und Handle-Methode:
Swift 3.0
und Handle-Methode:
quelle
So habe ich es bisher gemacht: in
UITextFieldDelegate
Swift4-Version
quelle
Swift 3
quelle
Swift 3.0.1+ (Einige der anderen Swift 3.0-Antworten sind nicht aktuell)
quelle
textField (_: shouldChangeCharactersIn: replaceString :) hat in Xcode 8, Swift 3 für mich funktioniert, wenn Sie jeden einzelnen Tastendruck überprüfen möchten.
quelle
Swift 4
Konform mit UITextFieldDelegate .
quelle
Sie können diese Delegatmethode aus UITextFieldDelegate verwenden. Es wird bei jeder Charakteränderung ausgelöst.
Doch diese wird nur ausgelöst , BEVOR eine Änderung vorgenommen wird (in der Tat wird eine Änderung nur gemacht , wenn Sie von hier wahr tun zurück).
quelle
.isEmpty
Methode erst dann true, wenn diese Methode die Chance hatte, true zurückzugeben. um der App mitzuteilen, dass sich das Textfeld ändern soll.Vielleicht RxSwift verwenden?
brauchen
Importe offensichtlich hinzufügen
Also hast du eine
textfield : UITextField
Du hast andere 3 Methoden ..
quelle
Swift 4
Wenn Sie eine Änderung vornehmen möchten, nachdem der Benutzer vollständig eingegeben hat (wird aufgerufen, sobald der Benutzer die Tastatur schließt oder die Eingabetaste drückt).
quelle
quelle
Sie sollten diese Schritte ausführen:
Beispielcode:
quelle
So können Sie
textField text change listener
mit Swift 3 ein hinzufügen :Erklären Sie Ihre Klasse als
UITextFieldDelegate
Fügen Sie dann traditionell eine textFieldShouldEndEditing-Funktion hinzu:
quelle
Swift 4.2
Schreiben Sie dies in viewDidLoad
Schreiben Sie diese außerhalb von viewDidLoad
Sie können das Ereignis durch UIControl.Event.editingDidBegin oder was auch immer Sie erkennen möchten, ändern.
quelle
Nur für den Fall, dass Sie an einer SwiftUI-Lösung interessiert sind, funktioniert dies für mich:
Ich muss sagen, es ist nicht meine Idee, ich habe es in diesem Blog gelesen: SwiftUI-Bindung: Ein sehr einfacher Trick
quelle
Falls es nicht möglich ist, das addTarget an Ihr UITextField zu binden, empfehle ich Ihnen, eines davon wie oben vorgeschlagen zu binden und den Code für die Ausführung am Ende der shouldChangeCharactersIn-Methode einzufügen.
Und beim Aufruf in shouldChangeCharactersIn func.
quelle
schnell 4
In viewDidLoad ():
Fügen Sie diese Funktion hinzu:
quelle
Erstellen Sie eine neue benutzerdefinierte Klasse MaterialTextfield.swift
quelle
UITextField
seinen Wert aktualisiert hat - warum eine übermäßig komplexe Klasse erstellen, um dieses einfache Problem zu lösen?