Можете ли вы добавить TableView UITableViewController в другой View?

Я вставил UITableViewController и соответствующий ему UITableView в простой документ IB. Цель состоит в том, чтобы включить UITableView внутри родительского UIWindow (или UIView) с другими «вещами» (чем угодно), украшающими таблицу. Вот как это может выглядеть в Интерфейсном Разработчике.

введите описание изображения здесь

Я пробовал это много раз и всегда попадаю в одно и то же место.

  1. Создайте рабочий подкласс UITableViewController, заполненный данными
  2. Настройте UTableView и его ячейки, включая цели касания
  3. Добавьте вновь созданный UITableViewController в документ IB.
  4. Перетащите UITableView из UITableViewController в основной UIView
  5. Подключите UITableViewController к UITableView
  6. Примечание: добавление UITableViewController в код приводит к той же проблеме

При запуске приложения в эмуляторе iPhone или на устройстве таблица отображается правильно, но дает сбой при первой попытке взаимодействия с ней. Прокрутка, нажатие, что угодно приводит к сбою приложения. Кажется, это проблема делегата, например, UITableView не знает, как связаться с UITableViewController, но я не знаю, как исправить проблему.

До сих пор мне удавалось обойтись, настроив tableHeaderView, чтобы получить достаточные макеты, но я бы предпочел, чтобы другая техника работала.


person Dan Harrelson    schedule 02.07.2009    source источник


Ответы (1)


Вы на правильном пути! Вот что вам нужно сделать:

  1. Создайте стандартный подкласс UIViewController с сопровождающим его представлением xib.

  2. Добавьте UITableView в XIB.

  3. Подключите все провода. Контроллер представления будет делегатом и источником данных для вашей таблицы, поэтому вы должны реализовать оба протокола.

  4. В вашем файле реализации добавьте все необходимые источники данных и методы делегирования, необходимые для представления таблицы:

    (UITableViewCell *)tableView:(UITableView *)tv
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
    

Ваш заголовочный файл может выглядеть примерно так:

MyViewController.h

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
    IBOutlet UITableView *myTableView;
    //This outlet is only necessary if you need to send messages to the table view (such as reloadData)
}
@end

Это должно сработать!

person Reed Olsen    schedule 02.07.2009