是否可以在同一个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];
由于某种原因,它总是加载第一个单元格。
这一切都有效吗?或者有办法吗?
由于
答案 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;
}
}
}