textFieldDidEndEditing стрельба "слишком поздно" - PullRequest
2 голосов
/ 17 февраля 2012

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 17 февраля 2012

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

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

1 голос
/ 17 февраля 2012

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

textFieldShouldEndEditing:
...