comeFirstResponder: автоматически выделите UIControl, который становится первым респондентом - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть группа UITableViewController с одним разделом и несколькими строками.Каждый cell состоит из двух элементов: UILabel с описанием и UITextField для ввода.Форма, я бы сказал.

В нижней части находится кнопка «Далее» для перехода к следующему представлению.Но перед этим я проверяю UITextField: если пользователь не заполнил поле, это поле должно получить фокус, чтобы пользователь увидел, что ему нужно что-то ввести.Я попытался с этим:

[inputField becomeFirstResponder];

Помните, что кнопка, которую я нажал, - в нижней части моего обзора, и представьте, что UITextField - в верхней части ,В этой ситуации поле не получает фокус, потому что это слишком далеко.Теперь, когда я медленно прокручиваю вверх и поле становится видимым, поле становится первым респондентом и получает курсор :-) Вывод: becomeFirstResponder сработал, но не совсем так, как я хотел.Я не хочу прокручивать пальцем вверх, поле должно получить фокус и быть видимым автоматически.

Есть ли способ "прыгнуть" прямо на мое поле?Использовать альтернативу becomeFirstResponder?Прокрутите к моему полю автоматически?

Спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Если вы знаете индекс ячейки с UITextField, который хотите редактировать, используйте



NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]

прежде чем позвонить becomeFirstResponder.

Если ячейка находится за пределами экрана, может стать ошибкаFirstResponder для некоторых версий iOS. Кроме того, некоторые версии будут выполнять дополнительную прокрутку в табличном представлении в некоторых ситуациях (например, если код Apple определяет, что респондент все еще будет вне экрана без дополнительной прокрутки). Чтобы обойти эти проблемы, вам может потребоваться позвонить в службу неотложной помощи после завершения анимации прокрутки.

0 голосов
/ 10 марта 2014

У меня была бы такая же проблема. это происходит из-за анимации UIA, возникающей для двух задач одновременно .Таким образом, в то время как UIAnimation для scrollToRowAtIndexPath игнорирует становление становления.

Решением может быть отключение одного из эффектов анимации ИЛИ , используя performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];.

...