表格细胞扩张滞后

时间:2014-04-29 23:26:11

标签: ios objective-c tableview tablecell

我有一个自定义表视图&amp;选中时单元格扩展的单元格。它现在正常运作并相应地运作。但是,当我选择要扩展它们的细胞时,响应需要大约半秒钟。下面的代码位于didSelectRowAtIndexPath中。 我的假设是在beginUpdates和endUpdates之间,有太多事情要继续增加原始单元格的高度,然后更新整个表格视图。还有另一种方法可以更好地实现它吗?< / p>

**[_tableView beginUpdates];**

ReviewTestTableCell *reviewCell1 = (ReviewTestTableCell *)[tableView cellForRowAtIndexPath:indexPath];

        CGRect rect = CGRectMake(reviewCell1.review.width, 900, reviewCell1.review.width, 900);

        CGRect textRectb = [reviewCell1.review textRectForBounds:rect limitedToNumberOfLines:1000];
        float labelHeight = textRectb.size.height;

        reviewCell1.review.height = labelHeight;
        expandHeight = labelHeight + 75 ;

        if ([[userdefaults objectForKey:@"merchantType"] isEqual:@"T"])
        {reviewCell1.height = labelHeight + 50;
        reviewCell1.bottomRatingView.height = reviewCell1.bottomRatingView.height - 20;

        }
        else
        {
            reviewCell1.height = labelHeight + 75;}

        reviewCell1.bottomRatingView.hidden = NO;
        reviewCell1.bottomRatingView.top = reviewCell1.review.bottom;

        **[_tableView endUpdates];**

       [_isExpandList replaceObjectAtIndex:indexPath.row withObject:@1];
    }

EDIT / ADD:

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

 UITableViewCell *cell3 = [self tableView:tableView cellForRowAtIndexPath:indexPath];

if ([_isExpandList[indexPath.row]  isEqual: @1] && [[_dataList objectAtIndex:indexPath.row] valueForKey:@"Item1Score"] != nil) {

           return  cell3.height + 3 + 65;
}
else if ([_isExpandList[indexPath.row]  isEqual: @0])
{
return cell3.height +5;
}
else return cell3.height +3;
}

1 个答案:

答案 0 :(得分:0)

你不应该经历那种试图手动扩展细胞的精巧舞蹈。您当然不应该手动拨打willDisplayCell

使用this question答案中描述的方法,您应该有一个属性或某些东西来跟踪选择了哪个单元格并使heightForRowAtIndexPath:方法针对该特定indexPath进行调整,然后调用

[tableView beginUpdates];
[tableView endUpdates];

对于每个单元格将调用heightForRowAtIndexPath,当您的方法与所选行匹配时,您的方法将为其提供更大的高度。 tableView将平滑地调整单元格的高度。

类似于:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self.selectedIndexPath isEqual:indexPath]) {
        return 80.0f;
    }

    return tableView.rowHeight;
}