如何在 1 个视图控制器中管理 2 个表视图?

Posted

技术标签:

【中文标题】如何在 1 个视图控制器中管理 2 个表视图?【英文标题】:How to manage 2 tableviews in 1 viewController? 【发布时间】:2010-01-18 15:18:11 【问题描述】:

有谁知道在一个 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 语句真的很烦人。另外,当有很多 tableViews 时,真的很难阅读。此外,我在 NSURLConnection 等方面也有同样的问题......一旦我有几个对象响应相同的委托协议,事情就会变得一团糟。

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

【问题讨论】:

【参考方案1】:

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

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

  return [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"tableView%d:titleForHeaderInSection:", tableView.tag])];

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

【讨论】:

很方便!谢谢。【参考方案2】:

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

【讨论】:

这是有道理的。下次我必须处理几个委托对象时,我会这样做。谢谢。

以上是关于如何在 1 个视图控制器中管理 2 个表视图?的主要内容,如果未能解决你的问题,请参考以下文章

在单个视图iOS中加载2个表视图[关闭]

如何在第二个视图控制器上显示核心数据?

不同控制器的页面控制或滚动视图

如何在 Laravel 中将数据从 1 个视图插入到 2 个表中

uitableview didselectrowatindex 仅适用于第一个表视图而不适用于同一视图控制器中的第二个表视图?

在 iPad 端口中管理视图控制器