我使用标准表视图数据源协议删除表格单元格:
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(editingStyle == UITableViewCellEditingStyleDelete)
{
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
我想在动画完成后运行一些其他代码,但 deleteRowsAtIndexPaths:withRowAnimation 方法没有完成块。在这个方法完成后我怎么能运行一些代码呢?
答案 0 :(得分:7)
对于iOS 6 Apple将- tableView:didEndDisplayingCell:forRowAtIndexPath:
添加到UITableViewDelegate
。当从显示中删除每个UITableViewCell
时,您应该能够立即使用它来获取回调,因此如果您知道在特定索引路径上启动了删除动画,那么您可以将其用作通常知道动画已经结束的可靠方法。
(除此之外:我猜如果用户在动画期间将屏幕上的单元格滚动出来,那么你可能会得到假阳性,但是这样的事情将不太可能增加一个基本的防范,以防止持续的负面后果,而不是担心短暂的,例如,当中间删除对象滚动到屏幕上时,我最终显示一个空单元格,因为我已经将其从我的商店中删除了)
答案 1 :(得分:2)
我相信一种方法是实现UITableViewDataSource
的方法tableView:commitEditingStyle:forRowAtIndexPath:
并在其中执行延迟性能方法。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (UITableViewCellEditingStyleDelete == editingStyle) {
[self performSelector:@selector(delayedMethod) withObject:nil afterDelay:0.1];
}
}
-(void)delayedMehtod {
// Your code here...
}
它可能不像“完成”块那么漂亮,但我确信它会成功。
希望这有帮助!