iPhone:如何在一个NIB中控制两个表

Jer*_*emy 2 iphone uitableview

我需要在同一个NIB中使用两个UITableView.我使用过IB并用两个表创建了一个视图.

我的头文件包含ViewController和两个类,每个表一个(见下文).在IB中,我可以将每个表的委托和数据源连接到FileOwner,但我无法弄清楚如何创建IBOutlet连接.我收到此消息: - [News tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例0x15d3c0 2011-12-11 07:20:27.480 myCity1 [659:707]由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因: ' - [new tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例0x15d3c0'

这是头文件:

@interface News : UIViewController {

}

@end

@interface TownNews : UITableViewController {

UITableView *townNewsTable;

}

@property (nonatomic, retain) IBOutlet UITableView *townNewsTable;

@end

@interface GeneralNews : UITableViewController {

UITableView *generalNewsTable;

}

@property (nonatomic, retain) IBOutlet UITableView *generalNewsTable;

@end
Run Code Online (Sandbox Code Playgroud)

mak*_*ron 6

我在我的一个项目中处理这个问题(你可以看一下:appstore中名为IJCAI11的免费应用程序;标签'People'(索引是用单独的tableView完成的)); 就我在上面的代码中所看到的,你让事情变得太复杂了.我将描述我是如何做到的,而不是说你不应该做什么:)

我只有一个类,让我们说YaddaYaddaViewController.

@interface YaddaYaddaViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
    UITableView *tableView1;
    UITableView *tableView2;
}
@property (nonatomic, retain) IBOutlet UITableView * tableView1;
@property (nonatomic, retain) IBOutlet UITableView * tableView2;

@end
Run Code Online (Sandbox Code Playgroud)

请注意,viewController派生自UIViewController,而不是UITableViewController(类UITableViewController的目标是能够在2分钟内实现简单的tableView,对于更多自定义内容,您应该始终使用UIViewController.要了解更多相关信息,请查看UITableViewController类的文档).

在"文件所有者"的IB中,我只需设置YaddaYaddaViewController; 我将tableView1和tableView2出口链接到View中的正确表; 我将委托和数据源链接到tableView1/2,所以我有'multiple'委托和数据源.

最后,在代码中,对于所有委托方法(例如tableView:cellForRowAtIndexPath :)我只关注tableView值,其委托事件导致调用此方法,如:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.tableView1) {
        // some code here
    } else {
        // alternative code here
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!