rezygnacja z pracy a rezygnacja z pracy

W języku Swift zarówno [someTextField].resignFirstResponder(), jak i self.view.endEditing(true) wykonują to samo zadanie - ukrywają klawiaturę przed widokiem użytkownika i usuwają fokusowanie dowolnego pola tekstowego, którego używało. Rozumiem, że to pierwsze jest specyficzne dla konkretnego pola, podczas gdy to drugie obejmuje cały widok, ale poza chęcią skierowania konkretnego pola tekstowego, kiedy jedno jest preferowane/zalecane nad drugim?

Author: Van Du Tran, 2015-04-26

2 answers

someTextField.resignFirstResponder()

resignFirstResponder() dobrze jest używać w każdej chwili, gdy wiesz dokładnie, które pole tekstowe jest pierwszym ratownikiem i chcesz zrezygnować z jego statusu pierwszego ratownika. Może to być nieco bardziej wydajne niż alternatywa, ale jeśli robisz coś takiego, jak tworzenie niestandardowej kontroli, może to mieć sens. Być może masz pole tekstowe, a po naciśnięciu przycisku "Dalej" chcesz pozbyć się klawiatury i zaprezentować na przykład selektor daty. Tutaj na pewno skorzystam resignFirstResponder()

self.view.endEditing(true)

Zazwyczaj rezerwuję to dla scenariuszy, w których absolutnie muszę wyczyścić klawiaturę bez względu na to, co się obecnie dzieje, z jakiegokolwiek powodu. Może mam menu? Tuż przed wyjściem, bez względu na to, co się dzieje, klawiatura powinna zniknąć, więc upewnię się, że Wszystko zrezygnuje ze statusu pierwszego reagowania. Ważne jest, aby pamiętać, że endEditing() przejrzy całą hierarchię podwidywań i upewni się, że to, co jest pierwszy respondent rezygnuje ze swojego statusu. To sprawia, że jest to mniej efektywne niż wywołanie resignFirstResponder(), Jeśli masz już konkretne odniesienie do pierwszego reagowania, ale jeśli nie, jest to łatwiejsze niż znalezienie tego widoku i rezygnacja z niego.

 77
Author: nhgrif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-28 23:46:21

Nie ma tak surowej reguły.

Używasz resignFirstResponder, gdy masz odniesienie do pola tekstowego, które aktualnie posiada status pierwszej odpowiedzi. Jeśli nie masz referencji lub nie jesteś tego pewien, endEditing zrobiłby sztuczkę.

Należy jednak zauważyć, że endEditing ma parametr logiczny, który czasami ustawiamy na true. Ustawiając ten parametr na true widok, na którym została wywołana endEditing, zmusi każde dziecięce pole tekstowe do rezygnacji z pierwszej odpowiedzi status niezależnie od tego zwrócił wartość false z metody delegate textFieldShouldEndEditing. Przeciwnie, wywołanie endEditing z false tylko poprosi (nie wymusi) pole tekstowe o rezygnację, z poszanowaniem wartości zwracanej przez metodę protokołu textFieldShouldEndEditing.

 13
Author: Ayan Sengupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-26 20:10:33