只有在插入动画完成后才重新加载UITableViewCell

问题描述:

所以我将UITableViewCell插入到我的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

为什么你需要重新加载一个新插入的行?为什么不等待并插入行“someRequestWithCompletion”完成? – rmaddy 2013-03-10 17:19:18

+0

在这里,我想,只有tableview的可以重新加载:( – 2013-03-10 17:43:39

+0

@KishorKundan你只重新加载表视图。您可以重新加载整个表,某些行或某些部分。当您只重新加载一行,这并不罕见人们说他们正在重新加载单元格 – rmaddy 2013-03-10 18:29:25

试试这个..

U可以重新加载您的TableView动画完成后。

[CATransaction begin]; 
[searchTableView beginUpdates]; 

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

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

[searchTableView endUpdates]; 

[CATransaction commit]; 
+0

三年后,这个答案拯救了我的屁股!谢谢先生。 – 2015-11-03 01:10:26