如何在1个viewController中管理2个tableviews?

时间:2010-01-18 15:18:12

标签: iphone uitableview delegates

有谁知道在一个viewController中管理多个tableView的简单方法? 到目前为止,我一直在这样做:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
if(tableView == self.tableView1) 
return 1;
else if(tableView == self.tableView2) 
return 2;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if(tableView == self.tableView1) 
return @"bla";
else if(tableView == self.tableView2) 
return @"blabla";
}

-(NSString *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(tableView == self.tableView1) 
...
else if(tableView == self.tableView2) 
...
}

我发现我必须为每个单一委托方法使用if / else语句真的很烦人。另外,当有很多tableView时,它真的很难读。此外,我对NSURLConnection等有同样的问题......只要有几个对象响应同一个委托协议,事情就会变得混乱。

让事情变得简单的最佳方法是什么? 感谢

2 个答案:

答案 0 :(得分:6)

您可以为表视图使用选择器和某种标识符(例如UIView标记)。像这样:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
  return [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"tableView%d:titleForHeaderInSection:", tableView.tag])];
}

当然,您需要为每个表视图使用一种方法。假设您的两个表格包含标签100和101,那么您将拥有tableView100:titleForHeaderInSectiontableView101:titleForHeaderInSection

答案 1 :(得分:6)

我经常使用的一种方法是实际让两个UITableView的委托和数据源是不同的对象。这样,您的视图控制器就不必来回切换,并且您的代码整体更清晰,更简单。