textFieldDidEndEditing срабатывает слишком поздно

У меня есть процесс с несколькими представлениями, который пользователь вводит в данные, и я сохраняю его в свойствах класса модели на каждом этапе пути.

Я использую textFieldDidEndEditing, чтобы проверить правильность ввода, и если да, то сохраняю введенные данные.

В представлении у меня есть событие continueButtonClicked, которое проверяет, проходят ли все проверки, и если да, то загружает следующее представление. Я НЕ устанавливаю здесь свойства модели, потому что я думаю, что мне не нужно этого делать, поскольку каждое поле сохраняется в поле модели 1 за раз. Однако я заметил некоторые проблемы.

Если пользователь находится внутри текстового поля и нажимает кнопку «Продолжить», событие continueButtonClicked срабатывает ДО textFieldDidEndEditing. В конечном итоге происходит то, что следующее представление заполняется «старой» моделью до того, как происходит сохранение в textFieldDidEndEditing.

Что мне не хватает? Правильно ли установить все свойства в «Продолжить»? Я бы сделал так, если бы программировал для Интернета, но это не подходит для нативного приложения.


person jaySF    schedule 17.02.2012    source источник


Ответы (2)


Можете ли вы попробовать это вместо этого и посмотреть, решит ли это вашу проблему?

textFieldShouldEndEditing:
person mbh    schedule 17.02.2012
comment
Потрясающий! Кажется, это решило проблему. Я немного смущен тем, почему textFieldShouldEndEditing срабатывает дважды: один раз перед continueButtonClick для ВСЕХ полей и второй раз для активного поля после срабатывания события continueButtonClick. Вроде безобидно, а просто любопытно. - person jaySF; 17.02.2012
comment
Если это тот активный, который вам действительно нужен, вы всегда можете определить это, проверив, является ли он первым ответившим. - person mbh; 17.02.2012

Вы можете вызвать resignFirstResponder для активного текстового поля/текстового представления (или для всех из них), что вызовет textFieldDidEndEditing.

В общем, для таких проблем редактирования текста другим подходом является злоупотребление методом делегата -textField:shouldChangeCharactersInRange:..., в котором вы можете определить новое значение для каждого введенного символа. Вы должны вернуться к этому методу только в том случае, если нет другого пути.

person mvds    schedule 17.02.2012
comment
Спасибо. Я также изучу этот метод, когда у меня будет время - просто чтобы обернуться вокруг него. Решение mbh, приведенное выше, оказалось для меня быстрее, но мне интересно и это. - person jaySF; 17.02.2012