Любопытная проблема:
Два UITextFields, управляемых одним контроллером, включены для ввода с клавиатуры.Если ввести значение в поле № 1 и нажать «Далее» в КБ, мигающий курсор просто переходит в поле № 2, и все в порядке.Но (только в iOS 5), если один касается поля № 2 вместо нажатия «Далее», курсор переходит к полю № 2, но не мигает и КБ не работает.
Проходя по коду, я обнаружил, что в первом случае последовательность выглядит следующим образом:
- textFieldShouldReturn: поле # 1 (которое подает первый респондент в отставку для # 1)
- textFieldDidEndEditing: поле # 1 (которое подает в отставку для # 1 и становится для # 2)
- textFieldShouldBeginEditing: поле # 2
Во втором случае (когдакасание поля и использования «Далее») последовательность:
- textFieldShouldBeginEditing: поле # 2
- textFieldDidEndEditing: поле # 1
- textFieldShouldBeginEditing: поле # 2 (снова)
- textFieldDidEndEditing: поле # 2 (которое подает в отставку для ОБА # 1 и # 2)
Очевидно, что когда переподготовка для # 2 выполнена, что убивает КБ,но ПОЧЕМУ iOS 5 выполняет вызов DidEndEditing с полем # 2 ???И как можно это обойти?
Обновление
Добавлен хук для textFieldShouldEndEditing.Он вызывается перед textFieldDidEndEditing для поля # 1, но не перед textFieldDidEndEditing для поля # 1.Хотя, что любопытно, textFieldShouldBeginEditing вызывается непосредственно перед textFieldDidEndEditing для поля # 2.В коде iOS пахнет как «ошибка с ошибками».
Обновление 2
iOS 5 не обрабатывает вызовы resign / становления из testFieldDidEndEditing.См. Ниже для обхода.