Próbuję sprawdzić, kiedy zmienia się pole tekstowe, podobnie jak funkcja użyta dla textView - do textViewDidChange
tej pory zrobiłem to:
func textFieldDidBeginEditing(textField: UITextField) {
if self.status.text == "" && self.username.text == "" {
self.topRightButton.enabled = false
} else {
self.topRightButton.enabled = true
}
}
Który rodzaj działa, ale topRightButton
włącza się, gdy tylko pole tekstowe zostanie wciśnięte. Chcę, aby było włączone tylko wtedy, gdy tekst jest wpisywany?
ios
swift
uitextfield
boraseoksoon
źródło
źródło
viewDidLoad
. Akcja jest taka sama jak litera za literę. Aplikacja ulega awarii po naciśnięciu przycisku klawiatury. Edycja: zrozumiałem! Brakowało średnika w akcji. Zakładałem, że musi to być tylko nazwa funkcji.Możesz wykonać to połączenie w kreatorze interfejsów.
W swoim scenorysie kliknij asystenta edytora u góry ekranu (dwa kółka na środku).
Ctrl + kliknij pole tekstowe w narzędziu do tworzenia interfejsów.
Przeciągnij z EditingChanged do wewnątrz klasy kontrolera widoku w widoku asystenta.
Nazwij swoją funkcję (na przykład „textDidChange”) i kliknij Połącz.
źródło
Swift 5.0
i sposób obsługi:
Swift 4.0
i sposób obsługi:
Swift 3.0
i sposób obsługi:
źródło
Sposób, w jaki do tej pory sobie z tym poradziłem: w
UITextFieldDelegate
Wersja Swift4
źródło
Szybki 3
źródło
Swift 3.0.1+ (niektóre inne odpowiedzi dla Swift 3.0 są nieaktualne)
źródło
textField (_: shouldChangeCharactersIn: replaceString :) działał dla mnie w Xcode 8, Swift 3, jeśli chcesz sprawdzić każde naciśnięcie klawisza.
źródło
Szybki 4
Zgodny z UITextFieldDelegate .
źródło
Możesz użyć tej metody delegowania z UITextFieldDelegate. Wystrzeliwuje przy każdej zmianie postaci.
TYLKO JEDYNIE OBEJMUJE PRZED dokonaniem zmiany (w rzeczywistości zmiana zostanie wprowadzona tylko wtedy, gdy zwrócisz wartość true tutaj).
źródło
.isEmpty
metoda nie równa się true, dopóki PO tej metodzie nie będzie szansa na zwrócenie true; aby powiedzieć aplikacji, że pole tekstowe powinno się zmienić.Może użyć RxSwift?
potrzeba
oczywiście dodaj import
Więc masz
textfield : UITextField
Masz inne 3 metody.
źródło
Szybki 4
Jeśli chcesz dokonać zmiany po całkowitym wpisaniu przez użytkownika (Zostanie on wywołany, gdy użytkownik zwolni klawiaturę lub naciśnij klawisz Enter).
źródło
źródło
Powinieneś wykonać następujące kroki:
Przykładowy kod:
źródło
W ten sposób można dodać
textField text change listener
za pomocą Swift 3 :Zadeklaruj swoją klasę jako
UITextFieldDelegate
Następnie tradycyjnie dodaj funkcję textFieldShouldEndEditing:
źródło
Szybki 4.2
napisz to w viewDidLoad
napisz to poza viewDidLoad
Możesz zmienić zdarzenie przez UIControl.Event.editingDidBegin lub cokolwiek, co chcesz wykryć.
źródło
Na wypadek, gdybyś był zainteresowany rozwiązaniem SwiftUI, działa ono dla mnie:
Muszę powiedzieć, że to nie jest mój pomysł, przeczytałem go na tym blogu: Wiązanie SwiftUI: bardzo prosta sztuczka
źródło
W przypadku, gdy nie jest możliwe powiązanie addTarget z twoim UITextField, radzę ci powiązać jeden z nich, jak zasugerowano powyżej, i wstawić kod do wykonania na końcu metody shouldChangeCharactersIn.
I na wezwanie powinnyChangeCharacters In func.
źródło
szybki 4
W viewDidLoad ():
Dodaj tę funkcję:
źródło
utwórz nową niestandardową klasę MaterialTextfield.swift
źródło
UITextField
zaktualizował swoją wartość - po co tworzyć zbyt złożoną klasę, aby rozwiązać ten prosty problem?