当UITableViewCell被选中时,跳过从UITableViewCell中删除自定义动画精彩片段

时间:2013-11-02 22:46:44

标签: ios objective-c uitableview

我有一个自定义动画:

    - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
UITableViewCell

,类似于:

    [UIView animateWithDuration:0.15 animations:^{
        self.center = CGPointMake(self.center.x + 110, self.center.y);
    } completion:^(BOOL finished) {
        isShifted = finished;
    }];

这里的想法是在触摸失败时移动单元格。然后,如果选择了单元格(没有滚动或取消事件),我将继续进行单元格的另一个动画并转换到新视图。

这里的问题是动画将单元格放回setHighlighted:NO方法调用的原始位置。在视觉上看起来像选择单元格移动(触摸下来),然后开始返回(系统移除突出显示)然后开始转换(系统调用setSelected:YES)。

据我所知,在表格中选择单元格时会发生以下情况:

  1. setHighlighted:YES
  2. setHighlighted:NO
  3. setSelected:YES
  4. 是否有任何优雅的解决方案可以跳过调用2并避免使用后移动画而不引入将检查选择的计时器?

2 个答案:

答案 0 :(得分:1)

如果您有UITableView的委托(可能是您自己的视图控制器),您可以通过类似"tableView: willSelectRowAtIndexPath:的内容来捕捉选择。

然后,您可以在选择单元格时对单元格执行“特殊”操作(例如设置强制单元格在动画中执行所需操作的属性)。

并将其恢复到通过"tableView:willDeselectRowAtIndexPath:"取消选择单元格之前的状态。

您也可以使用相同类型的委托方法进行突出显示,例如"tableView:shouldHighlightRowAtIndexPath:"

答案 1 :(得分:1)

您可以考虑使用委托方法tableView:shouldHighlightRowAtIndexPath:

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // The cell has been touched, perform custom animation here
    return NO;
}
永远不会在任何单元格上调用

setHighlight:,但您仍然有一个入口点来执行自定义动画。