在同一个XIB中有多个自定义单元

msk*_*skw 5 uitableview ios

是否可以在同一个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;
}
Run Code Online (Sandbox Code Playgroud)

在另一个表中,我将重用nib,但我会这样做:

    cell = ( SecondDeviceInfoCell *)[nib objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

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

这一切都有用吗?或者有办法吗?

谢谢

Cal*_*leb 4

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

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

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

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

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

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

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