手动重新排序UITableView后的动画完成通知

时间:2012-03-16 03:05:28

标签: ios uitableview

UITableView具有内置动画,在重新排序单元格后,它会轻轻地放入空置空间。在动画结束后,是否有地方可以使用某种通知?我想在完成后调用一个方法。目前我正在使用performSelector:withObject:afterDelay:,目前工作正常,但我想知道是否可以完成动画制作。
重申一下,我不是在谈论自定义动画,只是在UITableView中内置的动画。

我一直在寻找,似乎无法收集答案。

2 个答案:

答案 0 :(得分:4)

我意识到这个问题很古老,但当我试图找到@Gobot所遇到的同样问题的答案时,我仍然偶然发现了它。好吧,事实证明有一个简单的解决方案。就像@Mitchell Vanderhoeff所说,你需要插入方法

- (void)tableView:(UITableView *)tableView
        moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
        toIndexPath:(NSIndexPath *)toIndexPath {
        [CATransaction setCompletionBlock:^{
            // Completion code here
        }];
}
在你的tableview委托中

从tableview获得通知,它将要移动一行。关键是CATransaction setCompletionBlock。这将允许您在隐式动画事务上设置完成块,tableview正在为行移动执行此操作。就像名字所暗示的那样,在动画完成后,你在该块中放置的任何内容都将被执行。

如果QuartzCore框架不属于您的项目,则需要包含它。

答案 1 :(得分:0)

如果您可以访问表视图数据源,这变得非常简单。您只需在表视图单元格上设置属性并在数据源中实现方法。您必须设置的属性是

tableViewCell.showsReorderControl = YES;
您可能已经设置的

。现在,您所要做的就是在数据源中实现此方法:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;

每当用户释放正在重新排序的单元格时,表视图必须告诉数据源重新排序实际数据。你所要做的就是背上这个,就像这样:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    [self doMyFavoriteThing];
}

这就是全部!当然,这并不是严格意义上说动画的结束,而是归结为同一事件。