【问题标题】:How to manage 2 tableviews in 1 viewController?如何在 1 个视图控制器中管理 2 个表视图?
【发布时间】: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 等方面也有同样的问题......一旦我有几个对象响应相同的委托协议,事情就会变得一团糟。

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

【问题讨论】:

    标签: iphone uitableview delegates


    【解决方案1】:

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

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

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

    【讨论】:

    • 很方便!谢谢。
    【解决方案2】:

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

    【讨论】:

    • 这是有道理的。下次我必须处理几个委托对象时,我会这样做。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多