Как получить UIView, который попросил стать первым респондентом?

В моем приложении у меня много UITextFields и UITextView, в которые пользователь вводит данные. Когда пользователь нажимает на поле, оно становится первым респондентом, и клавиатура отображается красиво. Когда пользователь затем нажимает на другое поле (после изменения текущего поля), клавиатура исчезает, и текущее поле перестает быть первым респондентом. Однако нажатое поле не сразу становится новым первым респондентом, и клавиатура закрывается.

В моем приложении после изменения поля оно пересчитывает все данные и сбрасывает значения во всех других полях. Я думаю, что это то, что заставляет недавно задействованное поле терять свой запрос первого респондента. Есть некоторые поля, на которые не влияет пересчет, и они ведут себя правильно (то есть они сразу получают фокус, а клавиатура остается открытой). Поэтому я почти уверен, что изменение значения или какого-либо свойства поля сбрасывает ожидающий запрос первого респондента.

Как я могу определить, находится ли поле в очереди в очереди первого респондента (если такое есть)?

И как мне внести изменения, не удаляя его из этой очереди?


person zkon    schedule 17.10.2017    source источник
comment
Очереди первого респондента нет. Обычно, если пользователь нажимает на поле, если клавиатура уже отображалась, это не исчезает. Итак, вы должны заставить его уйти. Вам нужно подумать, почему это так.   -  person matt    schedule 17.10.2017
comment
Ага ... Во-вторых, в чем именно у вас тут проблема? Или чего вы пытаетесь достичь?   -  person NSAdi    schedule 17.10.2017
comment
Когда я нажимаю на другой UITextField, iOS вызывает resignFirstResponder () для текущего поля, а не мой код (насколько я могу судить). Я делаю обновление других полей с помощью метода textFieldDidEndEditing (). Так что я не закрываю клавиатуру (по крайней мере, не напрямую).   -  person zkon    schedule 17.10.2017
comment
Моя цель - позволить пользователю переключать фокус с одного поля на другое, а все значения обновляются между ними. В настоящее время, когда они касаются следующего поля, все поля теряют фокус, происходят обновления, и вам нужно снова нажать на следующее поле, чтобы изменить его.   -  person zkon    schedule 17.10.2017
comment
Документ для UIResponder, кажется, намекает на очередь со свойством .next, описанным как: Returns the next responder in the responder chain, or nil if there is no next responder. Но я не вижу, как это использовать или связать с фактическим полем.   -  person zkon    schedule 17.10.2017


Ответы (1)


Хорошо, я нашел проблему. Мой код устанавливал .isEnabled на false, а затем сбрасывал его обратно на true. Это то, что вызывало удаление поля из цепочки первого респондента. Мой код использовал один и тот же путь для просмотра и редактирования, и он изначально установил поле как отключенное, а если мы были в режиме редактирования, он затем установил его на включенное. Исправив это, просто включив его, без первоначального отключения одеяла, проблема была решена.

Итак, суть в том, что щелчок переключателя .isEnabled удалит поле из цепочки респондентов.

person zkon    schedule 17.10.2017