iOS UITableView reloadData 刷新結束后執行后續操作


 

 

 

如果在reloadData后需要立即獲取tableview的cell、高度,或者需要滾動tableview。

如果直接在reloadData后執行代碼是有可能出問題的,比如indexPath為nil等等異常情況。

  

[tableView reloadData]並不會等待tableview更新結束后才執行后續代碼,

而是立即執行后續代碼,然后異步地去計算scrollView的高度,獲取cell等等。

如果表中的數據非常大,在一個run loop周期沒執行完,

這時就顯示tableView視圖數據的操作就會出問題了。

 

 

 

 

Apple並沒有直接提供reloadData的api,想要程序延遲到reloadData結束在操作。

可以通過以下方法:

 

1. 通過layoutIfNeeded方法,強制重繪並等待完成。

[self.tableView reloadData]; [self.tableView layoutIfNeeded]; //刷新完成,執行后續需要執行的代碼

 

 

 

2.reloadData方法會在主線程執行,通過GCD,使后續操作排隊在reloadData后面執行。

[self.tableView reloadData]; dispatch_async(dispatch_get_main_queue(), ^{ //刷新完成,執行后續代碼
});

 

 

 

 

 

 

參考鏈接http://blog.csdn.net/cuibo1123/article/details/48558213

感謝原作者!

 

 

 

 


 轉載請注明出處:http://ficow.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM