#iphone #ios #uitableview
#iPhone #iOS #uitableview
Вопрос:
UITableViewController
Изменения происходят tableview
при появлении клавиатуры. Я бы хотел, чтобы ячейки оставались там, где они есть; поведение по умолчанию заключается в том, что представление просто сжимается, а верхняя ячейка остается там, где она есть. Я бы предпочел, чтобы нижняя ячейка оставалась на видимой кнопке.
Я могу придумать два подхода:
- Могу ли я указать, чтобы tableview уменьшался сверху, а не уменьшался снизу?
- Могу ли я перехватить изменение размера? В этом случае я мог бы вызвать
scroll
метод для прокрутки вниз.
РЕДАКТИРОВАТЬ: я, кажется, не был ясен. На самом UITableView
деле размер изменен. (Кажется, это особенность UITableViewController
. Проблема, с которой я сталкиваюсь, заключается в поведении UIScrollView
UITableView
элемента, который содержит UITableViewCell
s. Прослушивание UIKeyboardDidShow
и подобных событий только для изменения положения прокрутки похоже на стрельбу по воробьям из пушек.
Ответ №1:
Да. Прекратите использовать UITableViewController, если он не обеспечивает желаемое поведение. Вместо этого просто создайте подкласс UIViewController со свойством UITableView, прослушивайте уведомления с клавиатуры и отвечайте так, как вам нравится; добавляя вставки в табличное представление и прокручивая, чтобы ячейки оставались видимыми по желанию.
Комментарии:
1. Вероятно, вы также могли бы переопределить методы
keyboardWasShown:
иkeyboardWillBeHidden:
которые вызываются для отправки уведомлений с клавиатуры.2. Возможно, к сожалению, эти методы не являются частью общедоступного интерфейса UITableViewController, поэтому вы не можете рассчитывать на их переопределение, чтобы предотвратить поведение контроллера по умолчанию. Если UITableViewController объявил их в общедоступном интерфейсе, это было бы прекрасным способом настроить его поведение.
Ответ №2:
Вы можете контролировать, как будет изменяться размер таблицы и / или прокручиваться ячейки в UIKeyboardDidShowNotification
. Поэтому сначала вам нужно выполнить UITableViewController
наблюдение за следующими двумя уведомлениями (не уверен, необходимо ли это для TableViewControllers) :
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
Вы могли бы сделать это в своем методе viewDidLoad. Затем вам нужно написать некоторый код, чтобы делать то, что вы хотите. В качестве отправной точки я рекомендую вам использовать фрагменты кода из движущегося содержимого, расположенного под клавиатурой, из Apple «Руководство по программированию текста, веб-страниц и редактирования для iOS».