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

时间:2012-08-30 16:13:40

标签: ios uitableview

是否可以在同一个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;
}

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

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

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

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

由于

2 个答案:

答案 0 :(得分:4)

  

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

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

  

然后让表加载不同的表。

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

  

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

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

您可以在视图控制器中创建IBOutletCollection,然后将多个不同的自定义单元格连接到该插座集合;这将为您提供一系列单元格,您可以使用objectAtIndex:进行选择。但同样,这真的不是一个好主意,因为每次只需要一个单元格时,你就会在文件中创建 all

答案 1 :(得分: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;
        }
    }
}
相关问题