2010-10-12 14 views
5

Mam UITextFieldDelegate, który wykonuje całą masę sprawdzania poprawności na dane wejściowe użytkownika, aby określić, czy powinny one mieć możliwość zakończenia edycji. W jednym konkretnym przykładzie nie można pozostawić pustego pola.Wykrywanie zmian tekstu UITextField z powodu cofnięcia Shake'a?

W tej chwili używam textField:shouldChangeCharactersInRange:replacementString: do sprawdzania poprawności wprowadzania tekstu po każdej edycji przez użytkownika.

Problem polega na tym, że jeśli użytkownik wyczyści pole (za pomocą małego przycisku "x"), kod walidacji przechodzi w tryb "nieprawidłowy" i uniemożliwia użytkownikowi nawigację, dopóki nie wprowadzą poprawnego tekstu. Jeśli użytkownik potrząsa telefonem, aby odzyskać stary tekst, shouldChangeCharactersInRange nie zostanie ponownie wywołany, a uczestnik pozostanie w stanie "nieprawidłowym", zamiast rozpoznać, że wszystko jest w porządku.

Nie jestem pewien, czy używam go poprawnie, ale wygląda na to, że wbudowana maszyna UITextFieldDelegate nie jest w stanie poradzić sobie ze zmianami tekstu z powodu cofnięcia/ponowienia.

Jaki jest najlepszy sposób, aby uzyskać prawidłową walidację w tym scenariuszu? Czy naprawdę potrzebuję podklasy UITextField w celu implementacji motionEnded:withEvent:? Wygląda na to, że rzeczy do edycji w UITextField powinny być naprawdę niezależne od tego, czy użytkownik rzeczywiście je wpisał, czy też stało się to z powodu cofnięcia, więc byłby oszołomiony, gdybym rzeczywiście musiał iść tą drogą.

Odpowiedz

5

Podłączyć metodę do zdarzenia UIControlEventEditingChanged ("Edycja zmieniona" w IB - nie "Zmieniono wartość").

Ta ikona wydaje się być uruchamiana za każdym razem, gdy/zmienia się pole tekstowe.

+0

Doskonale, dzięki. Działa jak uczta i jest o wiele prostsze niż implementacja 'shouldChangeCharactersInRange' oraz' textFieldShouldClear', co wcześniej robiłem. Westchnienie ulgi! – glenc

Powiązane problemy