Ios UITableViewCell子类在重新显示时重新加载子视图

Ios UITableViewCell子类在重新显示时重新加载子视图,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个UITableView填充了属于RightArrowTableViewCell类的单元格,该类是UITableViewCell的子类。子类单元格包含箭头图标的类似附件的视图(ArrowDecororView)。选择主类别时,向下旋转箭头图标,以显示同一表视图中的子类别列表 然而,当tableview被滚动并且主类别单元格被“移出视图”时,事情就不那么顺利了。一旦主类别单元格移回视线,箭头图标将恢复其初始水平位置 为了解决这个问题,我在RightArrowTableViewCell类中添加

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

然而,当tableview被滚动并且主类别单元格被“移出视图”时,事情就不那么顺利了。一旦主类别单元格移回视线,箭头图标将恢复其初始水平位置

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

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

- (void)updateIconStatus{
    self.arrowDecoratorView.transform =  CGAffineTransformMakeRotation(M_PI * 2.5);
    [self layoutIfNeeded];
}
上述解决方案似乎有效,但时间不长。连续3-4次滚动隐藏/显示主类别单元格后,箭头图标将恢复其原始水平位置

有没有办法解决这个问题


谢谢。

您可以尝试还原
表视图中
箭头装饰视图的
变换
:didEndDisplayingCell:forRowAtIndexPath:
,即在另一个方向进行旋转
-M_PI*2.5
。但是,我想,在某个时候,这仍然可能会失去同步。

您应该在CellForRowatineXpath中执行此操作,并且该标志不能是子类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;
}

谢谢,但每次都在发生转变。更新并不总是显示。能否尝试更新dequeueReusableCellWithIdentifier:forIndexPath:中的图标状态?这是个好主意。我在UITableViewCell子类中重写了prepareForReuse,如下:-(void)prepareForReuse{if(self.iconExpanded){[self-UpdateConstatus];}}但问题仍然存在。有关prepareForReuse方法的文档说明,在重写时,应始终调用超类实现,但我怀疑这是否能解决你的问题。你能在某个地方发布一个工作示例,让我们看到你描述的行为吗?对任何人来说,提出建议都会更容易。你对房产的看法可能是对的。我会尝试一下,让你知道。你完全正确!我不敢相信我试图在UITableViewCell中保存一个要重用的属性。。。