Вопрос по objective-c, iphone – Можете ли вы добавить TableView UITableViewController в другое представление?

31

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

enter image description here

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

Build a working subclass of UITableViewController filled with data Customize the UTableView and it's cells including tap targets Add the newly created UITableViewController into an IB document Drag the UITableView out of the UITableViewController and into the main UIView Wire up the UITableViewController to the UITableView Note: adding the UITableViewController in code results in the same problem

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

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

Ваш Ответ

1   ответ
32

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

  1. Create a standard UIViewController subclass with its accompanying view xib.

  2. Add a UITableView in the XIB.

  3. Wire everything up. The view controller will be the delegate and the datasource for your table, so you must implement both protocols.

  4. In your implementation file, add all of the necessary datasource and delegate methods needed for the tableview:

    (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

Это должно сделать это!

Работал как шарм, спасибо! Dan Harrelson

Похожие вопросы