статьFirstResponder:автоматически прокручивается до UIControl, который становится первым ответчиком
-
15-11-2019 - |
Вопрос
у меня есть сгруппированный UITableViewController
с одной секцией и множеством рядов.Каждый cell
состоит из двух элементов:а UILabel
с описанием и UITextField
для входа.Форма, я бы сказал.
Внизу находится кнопка «Далее» для перехода к следующему виду.Но перед этим я проверяю UITextField
х:если пользователь не заполнил поле, то это поле должно получить фокус, чтобы пользователь увидел, что ему нужно что-то ввести.Я попробовал с этим:
[inputField becomeFirstResponder];
Помните, кнопка, которую я нажал, на дне на мой взгляд, и представить, что UITextField
является на вершине.В этой ситуации поле не попадает в фокус, поскольку оно находится слишком далеко.Теперь, когда я медленно прокручиваю вверх и поле становится видимым, оно становится первым ответчиком и получает курсор :-) Вывод:А becomeFirstResponder
работало, но не совсем то, что я хотел.Я не хочу прокручивать пальцем вверх, поле должно автоматически получить фокус и стать видимым.
Есть ли способ «перепрыгнуть» прямо на мое поле?Используйте альтернативу becomeFirstResponder
?Пролистать до моего поля автоматически?
Спасибо за вашу помощь!
Решение
Если вы знаете индекс ячейки с UITextField, который хотите редактировать, используйте
NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]
прежде чем позвонить becomeFirstResponder
.
Если ячейка находится за пределами экрана, в некоторых версиях iOS может произойти сбой.Кроме того, некоторые версии в некоторых ситуациях будут выполнять дополнительную прокрутку таблицы (например,если код Apple определит, что ответчик по-прежнему будет вне экрана без дополнительной прокрутки).Чтобы обойти эти проблемы, вам может потребоваться позвонить в службу экстренного реагирования после завершения анимации прокрутки.
Другие советы
У меня была бы та же проблема. это связано с тем, что UIAimation выполняется для двух задач одновременно.Таким образом, хотя UIAimation для ScrollToRowAtIndexPath игнорирует статьFirstResponder .
Решение может быть отключить эффект анимации один из них ИЛИ еще, используя performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];
.