我正在尝试为UITableViewCell
加载一个扩展的单元格XIB。我的正常单元格和扩展单元格的内容几乎相同,除了我在扩展单元格中填充一些视图的额外空间。现在要区分正常细胞和扩展细胞我已经将扩展细胞内的UILabel
颜色更改为不同的颜色。我可以在点击细胞时加载扩展细胞XIB 然而 问题是每个单元格都被扩展的单元格XIB替换。唯一的区别是单击单元格的高度比其他单元格更高。当我单击返回时扩展的单元格,再次加载正常单元格XIB
。如何仅为单击的单元格加载展开的单元格XIB
?或者有更好的方法来实现这个目标吗?
以下是我如何扩展单元格。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([self.expandedCells containsObject:indexPath]) {
[self.expandedCells removeAllObjects];
isExpanded = NO;
[self.busTableView beginUpdates];
[self.busTableView reloadData];
[self.busTableView endUpdates];
}else{
isExpanded=YES;
if (self.expandedCells.count>0) {
[self.expandedCells removeAllObjects];
}
[self.expandedCells addObject:indexPath];
expCell.expContainer.hidden=YES;
//Some more code
[self.busTableView beginUpdates];
[self.busTableView reloadData];
[self.busTableView endUpdates];
}
}
cellForRow
方法看起来像这样。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (!isExpanded) { //BOOL variable set to NO in viewDidLoad initially
BusListCell *cell =(BusListCell*) [tableView dequeueReusableCellWithIdentifier:nil];
if (cell==nil) {
NSArray *nibs = [[NSBundle mainBundle]loadNibNamed:@"BusListCell" owner:self options:nil];
cell = nibs[0];
}
cell.busName.text = [[busArray objectAtIndex:indexPath.row]valueForKey:@"operatorName"];
return cell;
}else{
expCell = (ExpandedCell*)[tableView dequeueReusableCellWithIdentifier:nil];
if (expCell==nil) {
NSArray *nibs = [[NSBundle mainBundle]loadNibNamed:@"ExpandedCell" owner:self options:nil];
expCell = nibs[0];
}
expCell.bus_Name.text = [[busArray objectAtIndex:indexPath.row]valueForKey:@"operatorName"];
return expCell;
}
return nil;
}
答案 0 :(得分:1)
而不是检查cellForRowAtIndexPath:
if (!isExpanded) {}
你必须检查
if (![self.expandedCells containsObject:indexPath]){}