статьFirstResponder:автоматически прокручивается до UIControl, который становится первым ответчиком

StackOverflow https://stackoverflow.com/questions/5042895

Вопрос

у меня есть сгруппированный 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];.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top