有没有办法在tableViewController中使用多个uitableviewcell类和nib文件?
有一个很棒的教程视频,关于如何在cellForRowAtIndexPath函数中创建要在tableViewController中使用的自定义单元类,我会粘贴here,以防有人想看。
在这个例子中,他们只使用一种可重用的单元类。这来自我自己的项目,但它基本上是教程提供的内容。 “videoCellEntry”是我用nib文件videoEntryCell.xib创建的自定义单元格,“videoEntry”是我正在配置的每个单元格的类,“videos”是videoEntry的数组。
我假设使用多个nib文件,我可以设置一些条件来选择我想要的nib文件,然后调用另一个loadNibNamed:部分如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"videoCellId";
videoEntryCell *cell =
(videoEntryCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
if(<condition 1>) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"videoEntryCell" owner:self options:nil];
}
if(<condition 2>) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"videoEntryCell2" owner:self options:nil];
}
cell = (videoEntryCell *)[nib objectAtIndex:0];
}
// Configure the cell.
videoEntry *vid = [videos objectAtIndex:indexPath.row];
[cell configureForVideoEntry:vid];
return cell;
}
但是tableViewController可以处理多个单元格的nib文件吗?或者,还有更好的方法?并且每个单元格不会根据其nib文件需要不同的CellIdentifier吗?
答案 0 :(得分:1)
是的,您可以在TableViewController中使用多个Nib-Files和多个CellIdentifier。只需将您的条件放在CellIdentifier之前。这就是我做的方式。
- (UITableViewCell *)tableView中的一些示例:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法:
首先定义变量单元格:
UITableViewCell *cell;
现在是if-Block:
if(<condition 1>) {
static NSString *CellIdentifier = @"VideoCell1";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"videoEntryCell" owner:nil options:nil];
for (id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (UITableViewCell *) currentObject;
break;
}
}
}
// customize your cell here
}
if(<condition 2>) {
static NSString *CellIdentifier = @"VideoCell2";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"videoEntryCell2" owner:nil options:nil];
for (id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (UITableViewCell *) currentObject;
break;
}
}
}
// customize your cell here
}
最后:
return cell;
您可以根据需要随时重复if-Block。返回一个不 nil。
的单元格非常重要