Можете ли вы добавить UITableViewController TableView в другой вид?
Я вставил UITableViewController и соответствующий UITableView в простой документ IB. Цель состоит в том, чтобы включить UITableView внутри родительского UIWindow (или UIView) с другим "материалом" (что-либо действительно), украшающим таблицу. Вот что это могло бы выглядеть в Interface Builder.
![enter image description here]()
Я пробовал это много раз и всегда добираюсь до того же места.
- Создайте рабочий подкласс UITableViewController, заполненный данными
- Настроить UTableView и его ячейки, включая целевые объекты
- Добавить вновь созданный UITableViewController в документ IB
- Перетащите UITableView из UITableViewController и в главный UIView
- Подключите UITableViewController к UITableView
- Примечание: добавление UITableViewController в код приводит к той же проблеме
При запуске приложения в эмуляторе iPhone или на устройстве таблица отображается правильно, но сбой при первом попытке и взаимодействии с ним. Прокрутка, кран, все сбой приложения. Это, кажется, проблема делегата, например, UITableView не знает, как связаться с UITableViewController, но я не знаю, как исправить проблему.
До сих пор мне удалось обойтись, настроив tableHeaderView, чтобы получить макеты, которых достаточно, но я бы предпочел использовать другую технику.
Ответы
Ответ 1
Ты на правильном пути! Вот что вам нужно сделать:
-
Создайте стандартный подкласс UIViewController с сопроводительным представлением xib.
-
Добавить UITableView в XIB.
-
Проведите все. Контроллер представления будет делегатом и источником данных для вашей таблицы, поэтому вы должны реализовать оба протокола.
-
В вашем файле реализации добавьте все необходимые источники данных и методы делегирования, необходимые для просмотра таблицы:
(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
Это должно сделать это!