У меня есть UITextFieldDelegate, который выполняет целую кучу проверок пользовательского ввода, чтобы определить, следует ли им разрешить завершить редактирование. В одном конкретном примере недопустимо оставлять поле пустым.
Сейчас я использую textField:shouldChangeCharactersInRange:replacementString:
для проверки ввода текста после каждого редактирования пользователем.
Проблема заключается в следующем: если пользователь очищает поле (с помощью маленькой кнопки «x»), код проверки переходит в «недопустимый» режим и не позволяет пользователю перемещаться, пока он не введет действительный текст. Если пользователь затем встряхивает телефон, чтобы вернуть старый текст, shouldChangeCharactersInRange
больше не вызывается, и делегат остается в «недействительном» состоянии вместо того, чтобы признать, что все в порядке снова.
Не уверен, правильно ли я его использую, но похоже, что встроенный механизм UITextFieldDelegate не в состоянии справиться с изменениями текста из-за отмены / повтора.
Какой лучший способ добиться правильной проверки в этом сценарии? Мне действительно нужно создать подкласс UITextField для реализации motionEnded:withEvent:
? Похоже, что обработка редактирования в UITextField должна действительно быть независимой от того, набрал ли пользователь ее на самом деле, или это произошло из-за отмены, так что я был бы огорчен, если бы мне действительно пришлось идти по этому пути.