heightForRowAtIndexPath涉及许多单元格

时间:2014-01-16 10:43:50

标签: ios iphone uitableview heightforrowatindexpath

我需要动态更改单元格的行。这就是我使用selectedIndex变量来存储所选行

的原因
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;

TarModel * tar = self.tarList[indexPath.row];

if (selectedIndex == indexPath.row) {
    static NSString *CellIdentifier = @"detailCell";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
else {
    static NSString *CellIdentifier = @"Cell";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}


// Configure the cell...
cell.textLabel.text = tar.way;

cell.detailTextLabel.text = [NSString stringWithFormat:@"cost: € %@",
                             tar.price];

return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"indexpath is %d", indexPath.row);
    selectedIndex = indexPath.row;
    isSearching = YES;

    [self.tableView reloadData];

}

然后我用这个改变所选行的高度:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    CGFloat height;

    if(selectedIndex == -1) {
        height = 44.0;
    }
    else if (selectedIndex == indexPath.row) {
        height = 88.0;
    }
    else {
        height = 44.0;
    }

    return height;
}

当我运行此代码并选择第一行时,一切正常,但如果选择第二行(mytableview中只有两行),我甚至会获得具有修改高度的所有下一个空行。哪里'我出错了?

3 个答案:

答案 0 :(得分:0)

对于动态单元格的更新高度,您可以使用以下代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

      if (indexPath.row == 1)
          selectedIndex = 150;
      else
          selectedIndex = 44;

      [tbl_news_list reloadData];
}
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
   return selectedIndex;
}

答案 1 :(得分:0)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
       return 44;
    }
    else if (indexPath.row == 1) {
       return 88;
    }
    else{
       return 0;
    }
}

答案 2 :(得分:0)

reloadRowsAtIndexPaths

中使用didSelectRowAtIndexPath

reloadRowsAtIndexPaths将再次重新加载didSelectRowAtIndexPath上的单元格。

它工作正常,我在演示应用程序中展开了点击的行。:)