我想知道是否允许在同一个视图中使用多个UItableView
(我在Apple's Human Interface Guidelines中看不到任何内容),如果没有问题,如何加载不同的{{1在DataSource
中为每个viewDidLoad
?
答案 0 :(得分:20)
您当然可以拥有多个表视图。您可能希望确保每个指针都有一个指针,然后在数据源方法中,您可以执行以下操作:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if(tableView == tableViewOne)
return 5;
else //if (tableView == tableViewTwo)
return 3;
}
对于所有委托/数据源方法,这都是相同的,这就是为什么它们为您提供哪个表视图作为参数。
答案 1 :(得分:5)
是的,你可以。问题是每个UITableView
将使用相同的UITableViewDataSource
和UITableViewDelegate
。因此,您必须确定在每个必要的委托方法中使用哪个表视图。
例如:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// make bigger rows
if (tableView == myBigRowTableView)
{
// make bigger rows
return 127;
} else if (tableView == mySmallRowTableView) {
// make smaller rows
return 20;
} else {
return 30;
}
}
答案 2 :(得分:5)
IMO最干净的解决方案是为每个tableview配备一个控制器。
如果你为n tableview使用一个控制器,你将不得不在很多地方使用if-statemenst, 在
– numberOfSectionsInTableView:
– tableView:numberOfRowsInSection:
– tableView:titleForHeaderInSection:
基本上在您需要实现的所有UITableViewDatasource-Protocol方法中。
因此,如果您需要更改某些内容,则必须在许多地方进行更改。
如果您为一个tableview使用一个控制器类,则根本不需要检查。
UITableViewDatasource
协议
– numberOfSectionsInTableView:
,– tableView:numberOfRowsInSection:
,– tableView:cellForRowAtIndexPath:
-setDataSource:
到右控制器类的对象我写了一个示例代码:https://github.com/vikingosegundo/my-programming-examples/tree/master/TwoTableViews
TwoTableViewsViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
if (firstController == nil) {
firstController = [[FirstTVContoller alloc] init];
}
if (secondController == nil) {
secondController = [[SecondTVController alloc] init];
}
[firstTable setDataSource:firstController];
[secondTable setDataSource:secondController];
[firstTable setDelegate:firstController];
[secondTable setDelegate:secondController];
firstController.view = firstController.tableView;
secondController.view = secondController.tableView;
}
答案 3 :(得分:3)
您可以为每个表设置标记。然后在tableview委托方法中应用该条件,例如:
myTable.tag=12;
答案 4 :(得分:1)
为了让生活更轻松,您可以将两个不同的委托传递给UITableView。如果传入相同的委托,则必须执行大量的if语句。通过创建两个不同的委托,它将使您的代码更加清晰。
答案 5 :(得分:1)
您可以在一个视图中拥有多个表视图。向每个表视图添加标签,并使用tableview.tag,您可以单独将数据加载到tableviews中。
示例:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView.tag == x) {
//code to load table view with tag value x
}
else{
//code to load second table
}
return cell;
}