5

在同一个 xib 中是否可以有多个自定义 uitableviewCell?

我正在尝试通过在同一个 xib 中组合不同的自定义单元格然后让表格从中加载不同的单元格来保存 xib 文件。

在 IB 中,我尝试将每个 uiTableViewCell 类设置为不同的自定义类 .m/.h 实现。这是我尝试过的:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *cellIdentifier = @"DevConfigCell";

DeviceInfoCell *cell = (DeviceInfoCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if(cell == nil)
{

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell~iphone" owner:self options:nil];
    cell = ( DeviceInfoCell *)[nib objectAtIndex:0];

}

return cell;
}

在另一张桌子上,我会重复使用笔尖,但我会这样做:

    cell = ( SecondDeviceInfoCell *)[nib objectAtIndex:0];

由于某种原因,它总是加载第一个单元格。

这一切都应该奏效吗?还是有办法?

谢谢

4

2 回答 2

4

我正在尝试通过在同一个 xib 中组合不同的自定义单元格来保存 XIB 文件

为什么?您可以创建的 .xib 文件的数量没有限制。

然后让表格从中加载不同的表格。

加载 .xib 时,会创建文件包含的所有对象。如果您将 10 个自定义单元格放在一个 .xib 中,加载该 .xib 将为这 10 个单元格中的每一个创建一个实例。这可能不是你想要的。将您的单元格保存在单独的 .xib 中可能是一个更好的计划。

cell = ( SecondDeviceInfoCell *)[nib objectAtIndex:0];

您似乎对铸造的作用感到困惑。当您从一种类型转换为另一种类型时,您不会以某种方式选择不同的对象。如果数组具有相同的内容,则返回的对象[nib objectAtIndex:0]总是相同的。nib强制转换只是改变编译器与值关联的类型;在这种情况下,它会更改指针的类型。

您可以在视图控制器中创建一个IBOutletCollection,然后将几个不同的自定义单元连接到该插座集合;这将为您提供一组单元格,您可以使用objectAtIndex:. 但同样,这真的不是一个好主意,因为每次只需要一个单元格时,您都会在文件中创建所有单元格。

于 2012-08-30T16:17:43.940 回答
0
   NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PlayerAvgsTableCell" owner:nil options:nil];
    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[PlayerAvgsTableCell class]])
        {
            cell = (PlayerAvgsTableCell *)currentObject;
            break;
        }
    }
}
于 2013-09-21T17:24:43.680 回答