我有一个tableView,它有一个按钮将其置于伪编辑模式。在此模式下,此单元格“向右/向左移动”以在左侧显示复选框。该过程与Mail应用程序“编辑”按钮的工作方式没有什么不同。
我现在这样做的方法是设置一个伪编辑标志,然后重新加载表格,如果设置了标志,那么单元格的绘制方式不同。我也把它放在一个动画块中,它给了我移动效果:
[UIView beginAnimations:@"cell shift" context:nil];
[UIView setAnimationDuration:kEventActionViewAnimationDuration];
cell.eventName.frame = (self.pseudoEditing) ? kPseudoEditingFirstIndentedRect : kFirstLabelRect;
cell.eventLocationName.frame = (self.pseudoEditing) ? kPseudoEditingSecondIndentedRect : kSecondaryLabelRect;
cell.eventStartDate.frame = (self.pseudoEditing) ? kPseudoEditingThirdIndentedRect : kThirdLabelRect;
cell.eventStartEndTime.frame = (self.pseudoEditing) ? kPseudoEditingFourthIndentedRect : kFourthLabelRect;
cell.imageView.frame = (self.pseudoEditing) ? kImageViewIndentedRect : kImageViewRect;
cell.rsvpImageView.hidden = !self.pseudoEditing;
[UIView commitAnimations];
return cell;
我的问题是我需要重新加载表,以便调用cellForRowAtIndexPath:方法来更新单元格,然后将表格位置重置为tableView的顶部。我可以然后将表位置设置到使用scrollToIndexPath之类的命令之前的位置:...然而这不会起作用,因为表会滚动到顶部然后再回到上一个我不想要的细胞。
那么有没有办法在tableView中重新加载tableCells而没有tableView更改滚动位置,类似于Mail应用程序的做法?
THX
答案 0 :(得分:0)
我根本不会重新加载表格视图。使您的单元格具有multiEditing
之类的属性。当您开始编辑时,迭代表视图的visibleCells
数组并在动画块中设置属性(单元格本身可以执行动画,类似于现有的setEditing:animated:
方法)。对于新单元格,只需在出列/创建它们后立即设置它。
答案 1 :(得分:0)
您可以继承UITableViewCell
并覆盖-layoutSubviews
。在该方法中,您将检查UITableViewCell
s editing
属性并相应地确定内容视图的帧。更改单元格编辑模式时,-layoutSubviews
中所做的任何更改都将自动设置动画。只需在表格视图上设置editing
,就会自动对所有单元格执行更改。