2013-03-10 81 views
3

所以我將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

回答

12

試試這個..

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

相關問題