Несовместимость респондента в текстовом поле iOS4 -> iOS 5 - PullRequest
1 голос
/ 28 ноября 2011

Любопытная проблема:

Два 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.См. Ниже для обхода.

1 Ответ

0 голосов
/ 29 ноября 2011

Я пришел к выводу, что iOS 5 (правильно) не обрабатывает случай наличия resignFirstResponder / becomeFirstResponder вызовов внутри textFieldDidEndEditing. Переместил логику (более или менее) в textFieldShouldReturn (сенсорный вид позаботился о себе), и теперь она, кажется, работает нормально.

...