仅在Insert-Animation完成后重新加载UITableViewCell

时间:2013-03-10 17:14:01

标签: iphone ios objective-c uitableview uikit

所以我在我的tableView中插入UITableViewCell

[searchTableView beginUpdates];
[searchTableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationTop];
[searchTableView endUpdates];

在此之后,我正在运行一个异步请求,该请求使用淡入淡出动画更新tableviewcell。

[someRequestWithCompletion:^(id data) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [searchTableView beginUpdates];
            [searchTableView reloadRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            [searchTableView endUpdates];
        });
 }];

但是在插入动画完成之前,此请求可能会完成。如果请求在插入动画之后完成,则没有问题,如果它在之前完成并在当前插入的同一单元格上调用reloadRowsAtIndexPaths,则单元格立即显示并强制重新加载,同时插入动画渐隐进行。

有没有办法在单元格完全插入后触发重载更新?什么是最好的方法呢?

如果有任何问题,请在评论中告诉我

1 个答案:

答案 0 :(得分:12)

试试这个..

你可以在完成动画后重新加载你的TableView。

[CATransaction begin];
[searchTableView beginUpdates];

[CATransaction setCompletionBlock: ^{
        [searchTableView reloadData];
    }];

[searchTableView deleteRowsAtIndexPaths: [NSArray arrayWithObjects: indexPath, nil]
                       withRowAnimation: UITableViewRowAnimationAutomatic];

[searchTableView endUpdates];

[CATransaction commit];