UITableViewController — событие, когда вид изменяет размер?

#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».