iOS - UITableView判斷reloadData加載數據已經結束


問題:

stackoverflow上有人提問這樣的問題

http://stackoverflow.com/questions/16071503/how-to-tell-when-uitableview-has-completed-reloaddata

如果在調用reloadDate方法后需要立即獲取tableview的cell、高度,或者需要滾動tableview,那么,直接在reloadData后執行代碼是有可能出問題的。

 

原因:

reloadDate並不會等待tableview更新結束后才返回,而是立即返回,之后再計算表高度,獲取cell(主線程中)。

如果表中的數據非常大,在一個run loop周期沒執行完,這時,需要tableview視圖數據的操作就會出問題了。

apple並沒有直接提供reloadData的api,想要程序延遲到reloadData結束在操作,可以用以下方法

方法1:

[self.tableView reloadData];  
[self.tableView layoutIfNeeded];  
//刷新完成  

layoutIfNeeded會強制重繪並等待完成。

 

方法2:

[self.tableView reloadData];  
dispatch_async(dispatch_get_main_queue(), ^{  
    //刷新完成  
});  

 

reloadDate會在主隊列執行,而dispatch_get_main_queue會等待機會,直到主隊列空閑才執行


免責聲明!

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



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