在tableView iOS中为扩展单元格加载自定义XIB?

时间:2014-10-09 13:43:37

标签: ios objective-c uitableview

我正在尝试为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;
  }

1 个答案:

答案 0 :(得分:1)

而不是检查cellForRowAtIndexPath:

if (!isExpanded) {}

你必须检查

if (![self.expandedCells containsObject:indexPath]){}