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

nmo*_*lot 8 iphone delegates uitableview

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

-(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) 
...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*pic 6

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

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

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


Gra*_*aul 6

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