Wiem, że muszę powiedzieć mojemu UITextField, aby zrezygnował z pierwszego odpowiadania, kiedy chcę zwolnić klawiaturę, ale nie jestem pewien, skąd mam wiedzieć, kiedy użytkownik nacisnął klawisz „Gotowe” na klawiaturze. Czy jest jakieś powiadomienie, na które mogę zwrócić uwagę?
181
Odpowiedzi:
Ustawiam delegata
UITextField
na mojąViewController
klasę.W tej klasie zaimplementowałem tę metodę w następujący sposób:
źródło
NO
zamiastYES
?NO
unikniesz dodawania powrotu wiersza do tekstu.Jeśli połączysz zdarzenie DidEndOnExit pola tekstowego z akcją (IBAction) w InterfaceBuilder, zostanie ono wysłane, gdy użytkownik zwolni klawiaturę (za pomocą klawisza powrotu), a nadawca będzie referencją do pola UITextField, które uruchomiło zdarzenie.
Na przykład:
Następnie w InterfaceBuilder połącz zdarzenie DidEndOnExit pola tekstowego z tą akcją na kontrolerze (lub czymkolwiek innym, czego używasz do łączenia zdarzeń z interfejsu użytkownika). Ilekroć użytkownik wprowadza tekst i zwalnia pole tekstowe, kontroler otrzyma tę wiadomość.
źródło
Możesz także utworzyć metodę w kontrolerze
a następnie w Inspektorze połączeń w IB podłącz do niego Zdarzenie „Did End On Exit”.
źródło
DidEndOnExit
wydarzenie, nie musisz dzwonićresignFirstResponder
. Możesz to przetestować, umieszczając symboliczny punkt przerwania[UIResponder resignFirstResponder]
. Zauważ, że nawet jeśli nie wywołasz resignFirstResponder, system nadal go wywołuje. Wyjaśnia to doskonała książka Matta Neuburga: apeth.com/iOSBook/…kubi, dzięki. Twój kod działał. Żeby było jasne (dla początkujących jak), gdy mówisz, że musisz ustawić
UITextField
,delegate
aby były równe ViewController, w którym znajduje się pole tekstowe. Możesz to zrobić gdziekolwiek chcesz. WybrałemviewDidLoad
metodę.źródło
delegate
. Nie musisz tego robić programowo, jak pokazano powyżej. Oba podejście działa dobrze.Oto sztuczka polegająca na automatycznym usuwaniu klawiatury bez kodu. W stalówce edytuj obiekt proxy First Responder w Inspektorze tożsamości, dodając nową akcję pierwszego odpowiadającego; nazwijmy to
dummy:
. Teraz podpisz zdarzenie Did End on Exit pola tekstowego dodummy:
działania obiektu proxy First Responder. Otóż to! Ponieważ zdarzenie Did End on Exit w polu tekstowym ma teraz parę cel-akcja, pole tekstowe automatycznie zwalnia klawiaturę, gdy użytkownik stuknie Return; a ponieważ nie ma kary za nie znalezienie modułu obsługi wiadomości wysłanej w łańcuchu odpowiedzi, aplikacja nie ulega awarii, mimo żedummy:
nigdzie nie ma implementacji .źródło
Poprostu dodaj
gdzie chcesz wyłączyć klawiaturę i wyświetlić widok próbnika.
źródło
W Swift możesz napisać IBAction w kontrolerze i ustawić zdarzenie Did End On Exit pola tekstowego na tę akcję
źródło
Swift 4.2
i będzie działać w 100%źródło
Możesz także użyć
Najlepszy, jeśli masz wiele pól Uitextfields:
źródło
Oto, co musiałem zrobić, aby to zadziałało i myślę, że jest to konieczne dla każdego, kto ma klawiaturę numeryczną na klawiaturę (lub inne bez gotowego przycisku:
Utworzyłem funkcję o nazwie
Zostało to również zdefiniowane w pliku .h.
Następnie połączyłem się z bitem „przyziemienia” dla ViewController w Interface Builder.
W funkcji „Tło jest stukane” umieszczam to:
Pamiętaj tylko, aby zmienić „answerField” na nazwę UITextField, z którego chcesz usunąć klawiaturę (oczywiście upewnij się, że UITextField jest zdefiniowany jak poniżej :)
Wiem, że ten temat prawdopodobnie umarł dawno temu ... ale mam nadzieję, że to gdzieś pomoże!
źródło
Zauważysz, że metoda „textFieldShouldReturn” zapewnia obiekt pola tekstowego, który nacisnął klawisz DONE. Jeśli ustawisz TAG, możesz włączyć to pole tekstowe. Lub możesz śledzić i porównywać wskaźnik obiektu z pewną wartością elementu zapisaną przez jego twórcę.
Moje podejście jest takie jak w przypadku samokształcenia:
Tymczasem poddaję test „walidacji”, który zaprzecza następnej rezygnacji. To jest tylko dla ilustracji, więc jeśli użytkownik wpisze NIE! w pole, nie zostanie odrzucone. Zachowanie było takie, jak chciałem, ale sekwencja wyników nie była zgodna z oczekiwaniami.
Poniżej znajduje się moje dane wyjściowe NSLog dla tej odmowy, a następnie akceptacja. Zauważysz, że zwracam wynik rezygnacji, ale spodziewałem się, że zwróci FAŁSZ do mnie, aby zgłosić się z powrotem do dzwoniącego ?! Poza tym ma niezbędne zachowanie.
źródło
Oto całkiem czysty sposób na zakończenie edycji za pomocą klawisza Return lub dotyku w tle.
W Konstruktorze interfejsów umieść pola w widoku klasy UIFormView
Co robi ta klasa:
Oto kod:
Berło
Realizacja
Podklasując formularz i przesłaniając
textFieldValueIsValid:
metodę, można uniknąć końca edycji, jeśli wartość nie jest poprawna dla danego pola.Jeśli pole ma delegata ustawionego w Konstruktorze interfejsów, wówczas formularz go nie zmienia. Nie widzę wielu powodów, aby ustawić innego delegata w określonej dziedzinie, ale dlaczego nie…
Istnieje wiele sposobów ulepszenia tej klasy widoku formularza - dołącz delegata, zrób układ, obsłuż, gdy klawiatury zakrywają pole (używając ramki currentEditingTextField), automatycznie rozpocznij edycję dla następnego pola, ...
Osobiście trzymam go w swoim frameworku i zawsze dzielę go na podklasy, aby dodać funkcje, jest to często przydatne w obecnej postaci.
Mam nadzieję, że to pomoże. Pozdrawiam wszystkich
źródło
jeśli chcesz całą edycję w UIViewController możesz użyć.
a jeśli chcesz odrzucić okulistyczną ukrywanie klawiatury UITextField, użyj.
1. dodaj delegata w swoim viewcontroller.h
uniemożliwić przekazanie uprawnień do pola tekstowego.
self.yourTextField.delegate = self;
dodaj tę metodę do kontrolera widoku.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; zwróć TAK;}
źródło
Programowo ustaw delegata UITextField w swift 3
Zaimplementuj UITextFieldDelegate w pliku ViewController.Swift (np. Klasa ViewController: UIViewController, UITextFieldDelegate {)
// Znak: - obsługa delegowanego pola tekstowego ..
źródło
Utwórz tablicę funkcji i połącz ją z polem tekstowym w pliku .xib i wybierz DidEndOnExit
źródło
Jeśli widok został utworzony za pomocą Konstruktora interfejsów, użyj następujących Po prostu utwórz metodę,
Po prostu kliknij prawym przyciskiem myszy pole tekstowe w widoku i ustaw zdarzenie jako Did End przy wyjściu i podłącz je do metody „ISSISSKeyboard ”.
Najlepszym przewodnikiem dla początkujących jest „Opracowanie pierwszego iPhone'a i iPada, wydanie drugie”
źródło
Spróbuj tego
źródło
źródło
Każdy, kto szuka Swift 3
1) Upewnij się, że Twój Delegat UITextField jest podłączony do ViewController w Storyboard
2) Zaimplementuj UITextFieldDelegate w pliku ViewController.Swift (np. Klasa ViewController: UIViewController, UITextFieldDelegate {)
3) Użyj metody delegowania poniżej
źródło
W ten sposób zwalniam klawiaturę w Swift 4.2 i działa ona dla mnie:
źródło
Swift 3, iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: Nadal działa dla mnie dobrze. Myślę, że facet, który poświęcił tę odpowiedź, po prostu nie zrozumiał, że musi powiązać tę akcję z polem UITextField w scenorysie.
źródło
źródło