2010-10-12 4 views
5

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

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

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

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

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

ответ

5

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

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

+0

Отлично, спасибо. Работает с удовольствием и намного проще, чем реализация 'shouldChangeCharactersInRange' и' textFieldShouldClear', что я и делал раньше. Вздох облегчения! – glenc