У меня есть вид, который я отображаю модально, чтобы получить информацию для входа в систему от пользователя.У меня есть следующие настройки:
- Контроллер представления является
UITableViewController
- В таблице есть три ячейки: поля имени пользователя и пароля (оба типа
UITextField
в пределах UITableViewCell
) и одну простую ячейку в качестве кнопки входа в систему. - Значения считываются из
UITextField
в textFieldDidEndEditing:
сообщении - Текстовые поля идентифицируются различными значениями тега.
Проблема
Моя проблема в том, что когда фокус находится на UITextField
и пользователь касается кнопки входа, соответствующее сообщение UITextField
textFieldDidEndEditing:
отправляется после didSelectRowAtIndexPath:
.Теперь проблема заключается в том, что я отправляю сообщение с новыми учетными данными пользователя на мой LoginViewControllerDelegate
в didSelectRowAtIndexPath:
, и в это время значение текстового поля еще не читается.
Некоторые идеи
У меня есть несколько идей, как это исправить, но у меня есть сложности с каждым из них.
Во-первых, я могу закрыть представление входа в систему, и делегат получает уведомление во время закрытия,но я хочу дать делегату (тому, кто владеет этим представлением входа в систему) полный контроль, и я думаю, что делегату следует закрыть представление входа в систему при успешном входе в систему (представление входа в систему считывает только учетные данные, делегат проверяет их).
Во-вторых, я мог бы также прочитать имя пользователя или пароль непосредственно перед вызовом делегата, но тогда мне пришлось бы искать текстовые поля.Если виды не видны, я думаю, что неправильно предполагать, что клетки существуют.Это просто большая проблема, но я не хочу делать это правильно.Было бы нормально сохранить UITextField
с?Таким образом, однако, я не могу использовать какую-то пользовательскую ячейку, которая сама предоставила бы текстовое поле.
В основном я хочу следующее:
- Обнаружена потребность в (действительных) учетных данных пользователя, открывается окно входа в систему
- Пользователь вводит имя пользователя и пароль и вызывает готово.
- Делегат проверяет эти учетные данные.Если они не работают, отображается сообщение и повторите шаг 2.
- Учетные данные в порядке, поэтому закройте окно входа в систему и продолжайте.