我有一个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个滚动后,箭头图标将恢复其原始水平位置。
关于如何解决这个问题的任何想法?
谢谢。
答案 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)
您可以尝试恢复transform
中arrowDecoratorView
的{{1}},即向另一个方向tableView:didEndDisplayingCell:forRowAtIndexPath:
进行轮换。但是,我猜这可能会在某些时候失去同步。