如何判断UITableView动画何时完成?

时间:2011-08-26 00:02:51

标签: iphone uitableview

如何判断[UITableView setEditing:YES animated:YES]何时完成?

我不想提供任何背景信息,因为我想避免任何人给我解决方案,这对我不感兴趣。

我想要的是调用上面的内容,然后在动画完成时调用一个单独的函数。


我编辑了帖子以提供上下文和一些解决方法。 最初我setEditing并立即重新加载表数据。

[tableView setEditing:YES animated:YES];
[tableView reloadData];

问题是表格在动画开始之前重新加载,因此从未见过动画。

以下是一些不同的解决方法:

[tableView setEditing:YES animated:YES];
[self performSelector:@selector(ReloadTable) withObject:nil afterDelay:1.0];

这样可行,但如果延迟不正确,那么它看起来会很糟糕。所以我需要知道延迟是什么,我可以弄清楚,但我们并不认为延迟总是一样的。

isEditing = YES;
[tableView reloadData];
[tableView setEditing:YES animated:YES];

这可能有效,但表格的行为会有所不同,具体取决于我们是否处于编辑模式。所以我必须使用自己的isEditing变量而不是标准的UITableView.editing。我宁愿不必创建一个新的布尔isEditing变量。

[tableView setEditing:YES animated:YES];
[tableView insertRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationTop];

这几乎可以正常工作,但在编辑模式下,第一行应该具有UITableViewCellEditingStyleInsert,而其他行则获得UITableViewCellEditingStyleDelete。并且使用上面的代码,在添加行之前设置编辑样式。因此第二行以UITableViewCellEditingStyleInsert结束。

3 个答案:

答案 0 :(得分:48)

[CATransaction begin];
[CATransaction setCompletionBlock: ^{
    // your animation has finished
}];
[tableView setEditing:YES animated:YES];
[CATransaction commit];

请注意,setCompletionBlock必须位于顶部。

答案 1 :(得分:3)

在iOS 4中,您可以执行以下操作:

[UIView animateWithDuration:0.3f
                 animations:^{
                     [self.tableView setEditing:YES animated:NO];
                 } 
                 completion:^(BOOL finished){
                     // Do something
                 }
];

答案 2 :(得分:1)

接受答案的Swift 4 版本:

CATransaction.begin()
CATransaction.setCompletionBlock {
    // your animation has finished
}
tableView.setEditing(true, animated: true)
CATransaction.commit()