UITableViewCell子类重新加载redisplay上的子视图

时间:2014-07-07 13:25:41

标签: ios objective-c uitableview

我有一个UITableView填充了属于RightArrowTableViewCell类的子类UITableViewCell。子类化单元格包含箭头图标(arrowDecoratorView)的类似附件的视图。选择主类别后,箭头图标将向下旋转,以显示同一表格视图中的子类别列表。

然而,当滚动表视图并且主类别单元格被移出视图时,事情就不那么顺利了。只要主类别单元格在视线中移回,箭头图标就会恢复其初始水平位置。

为了解决这个问题,我在RightArrowTableViewCell类中添加了一个标志,以检查单元格是否已展开。然后在tableView: willDisplayCell: forRowAtIndexPath:方法中,我执行以下操作:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    RightArrowTableViewCell *arrowCell = (RightArrowTableViewCell *)cell;
    if (arrowCell.iconExpanded) {
        [arrowCell updateIconStatus];
    }
}

updateIconStatus是这样的:

- (void)updateIconStatus{
    self.arrowDecoratorView.transform =  CGAffineTransformMakeRotation(M_PI * 2.5);
    [self layoutIfNeeded];
}

上述解决方案似乎有效但不会长久。在连续隐藏/显示主类别单元格的3-4个滚动后,箭头图标将恢复其原始水平位置。

关于如何解决这个问题的任何想法?

谢谢。

2 个答案:

答案 0 :(得分:1)

你应该在cellForRowAtIndexPath中执行它,并且标志不能是你的子类UITableViewCell的属性导致单元格被重用,所以属性应该属于你可以从中填充表格的数据结构。例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: NSIndexPath *)indexPath
{
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"customCell" forIndexPath:indexPath];

    CustomDataClass *data = [_arData objectAtIndex:indexPath.row];

    if(data.expand){
        [cell ShowArrowInThisPos];
    }
    else{
        [cell ShowArrowInThatPos];
    }
    ... some code

    return cell;
}

答案 1 :(得分:0)

您可以尝试恢复transformarrowDecoratorView的{​​{1}},即向另一个方向tableView:didEndDisplayingCell:forRowAtIndexPath:进行轮换。但是,我猜这可能会在某些时候失去同步。