5

我正在使用标准表格视图数据源协议来删除表格单元格:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(editingStyle == UITableViewCellEditingStyleDelete)
    {
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

我想在动画完成后运行一些其他代码,但deleteRowsAtIndexPaths:withRowAnimation方法没有完成块。在此方法完成后,我还能如何运行一些代码?

4

2 回答 2

8

对于 iOS 6 Apple 添加- tableView:didEndDisplayingCell:forRowAtIndexPath:UITableViewDelegate. UITableViewCell当每个都从显示中删除时,您应该能够使用它立即获得回调,因此,如果您知道您已经在特定索引路径上启动了删除动画,那么您可以将其用作通常可靠的方法来了解动画已经结束。

(旁白:我猜如果用户在动画期间将单元格滚动到屏幕外,那么您可能会得到误报,但这样的事情不太可能发生,我可能会添加一个基本的防范措施,以防止持续的负面后果,而不是担心短暂的,例如当中间删除对象滚动回屏幕时我最终显示一个空单元格,因为我已经将它从我的商店中删除了)

于 2013-08-27T22:07:53.487 回答
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...
}

它可能不像“完成”块那么漂亮,但我相信它会成功。

希望这可以帮助!

于 2013-08-27T21:52:34.253 回答