Обнаружение, когда текст UITextField изменился из-за отмены дрожания? - PullRequest
5 голосов
/ 13 октября 2010

У меня есть UITextFieldDelegate, который выполняет целую кучу проверок пользовательского ввода, чтобы определить, следует ли им разрешить завершить редактирование. В одном конкретном примере недопустимо оставлять поле пустым.

Сейчас я использую textField:shouldChangeCharactersInRange:replacementString: для проверки ввода текста после каждого редактирования пользователем.

Проблема заключается в следующем: если пользователь очищает поле (с помощью маленькой кнопки «x»), код проверки переходит в «недопустимый» режим и не позволяет пользователю перемещаться, пока он не введет действительный текст. Если пользователь затем встряхивает телефон, чтобы вернуть старый текст, shouldChangeCharactersInRange больше не вызывается, и делегат остается в «недействительном» состоянии вместо того, чтобы признать, что все в порядке снова.

Не уверен, правильно ли я его использую, но похоже, что встроенный механизм UITextFieldDelegate не в состоянии справиться с изменениями текста из-за отмены / повтора.

Какой лучший способ добиться правильной проверки в этом сценарии? Мне действительно нужно создать подкласс UITextField для реализации motionEnded:withEvent:? Похоже, что обработка редактирования в UITextField должна действительно быть независимой от того, набрал ли пользователь ее на самом деле, или это произошло из-за отмены, так что я был бы огорчен, если бы мне действительно пришлось идти по этому пути.

1 Ответ

5 голосов
/ 13 октября 2010

Подключите метод к событию UIControlEventEditingChanged («Редактирование изменено» в IB - не «Значение изменено»).

Похоже, что срабатывает всякий раз, когда изменяется текстовое поле.

...