1

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

4

4 回答 4

1

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

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

我个人更喜欢第一个。

于 2013-10-29T19:22:10.257 回答
0

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

@property (nonatomic, strong) UITableView *myTableView

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

if (tableView == self.myTableView){
    //return cell
} else if (tableView == someOtherTableView) {
    //return some other cell
}
于 2013-10-29T19:26:52.163 回答
0

我在这里写的答案:

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

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

您还可以在您的 UIViewController 上放置 2 个单独的 UITableView,然后在委托/数据源方法中处理它,即:

- (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;
}
于 2013-10-29T19:25:10.617 回答
0

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

于 2013-10-29T19:20:10.460 回答