有没有办法使用相同的cellForRowAtIndexPath函数填充两个或更多不同的UITableViews?

时间:2013-10-29 19:10:53

标签: ios objective-c uitableview

我有一个自定义的UITableView类,我在一个ViewController中有多个实例。使用唯一单元格数据填充这些不同实例的最优雅方法是什么?感谢您提前提供任何帮助!

4 个答案:

答案 0 :(得分:1)

现在我可以想到两种可能的解决方案:

  1. 为每个表提供不同的表视图数据源。如果这对您很重要,您可以在与视图控制器相同的文件中创建数据源。
  2. tableView:cellForRowAtIndexPath:方法根据表格有条件地加载单元格。您可以使用方法的第一个参数找出哪个表视图正在调用该方法。您还可以使用UITableView的tag属性进行区分。
  3. 我个人更喜欢第一个。

答案 1 :(得分:0)

请注意,方法签名tableView:cellForRowAtIndexPath:包含对tableView的引用。您可以使用它来确定哪个tableView请求单元格,并相应地返回相同/不同的数据。

答案 2 :(得分:0)

我在这里写的答案:

https://stackoverflow.com/a/19568737/480415

可以帮助您实现这一目标。:

  

您还可以在UIViewController上放置2个单独的UITableViews,   然后在delegates / datasource方法中处理它,即:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(tableView == _leftTableView)
    {
         static NSString *CellIdentifier = @"Cell";
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

         if (cell == nil) {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
         }

         //fill cell data here

         return cell;
    }
    else if(tableView == _rightTableView)
    {
         static NSString *CellIdentifier = @"Cell";
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

         if (cell == nil) {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
         }    

         //fill cell data here

         return cell;
     }
     return nil;
}

答案 3 :(得分:0)

在控制器中,您应该将tableViews定义为属性

@property (nonatomic, strong) UITableView *myTableView

然后,在tableView:cellForRowAtIndexPath:中,您可以使用以下内容检查哪个表正在进行回调:

if (tableView == self.myTableView){
    //return cell
} else if (tableView == someOtherTableView) {
    //return some other cell
}