我有一个自定义动画:
- (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
)。
据我所知,在表格中选择单元格时会发生以下情况:
setHighlighted:YES
setHighlighted:NO
setSelected:YES
是否有任何优雅的解决方案可以跳过调用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:
,但您仍然有一个入口点来执行自定义动画。