Я думаю, что ваша проблема связана с порядком, в котором методы textField вызываются при редактировании textField и непосредственном нажатии на другое.
Если я не ошибаюсь, это должно быть что-то вроде этого (выредактирование на A и нажмите на B)
textFieldShouldBeginEditing
для поля B textFieldShouldEndEditing
для поля A textFieldDidEndEditing
для поля A textFieldDidBeginEditing
для поля B
Поэтому, когда вы используете метод textFieldShouldEndEditing
, текстовое поле B уже стало первым респондентом.Поэтому, когда вы заставляете UIAlertView появляться, B теряет фокус и, следовательно, вызывает textFieldShouldEndEditing
тоже!
Это также было проблемой для меня, когда я хотел поднять представление, когда textField начал редактировать.Решение, которое я нашел, состояло в том, чтобы создать переменную логического класса, указывающую, переключаюсь ли я в настоящее время с одного textField на другое.Я установил TRUE
в textFieldShouldBeginEditing
и FALSE
в textFieldDidBeginEditing
.Когда вы находитесь в textFieldShouldEndEditing
, если оно установлено на TRUE
, это означает, что пользователь непосредственно нажал на другое textField.Тогда вам просто нужно найти правильный способ сделать ваши тесты только один раз (возможно, долженEndEditing должен вернуть false или что-то).