可能重複:
Get notified when UITableView has finished asking for data?等到UITableView的光潔度reloadData
是有可能得到通知時的tableview完成重裝reloadData方法後的數據?或者是否可以等到tableview完成重裝?
感謝
可能重複:
Get notified when UITableView has finished asking for data?等到UITableView的光潔度reloadData
是有可能得到通知時的tableview完成重裝reloadData方法後的數據?或者是否可以等到tableview完成重裝?
感謝
有一個很簡單的解決方法是檢查,如果你是在代表
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
最後一次迭代之後,最終完成的最後一次迭代中添加您的代碼中有
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if([indexPath row] == lastRow){
any code you want
}
}
謝謝
讓我們把一個完成塊放進去。誰不愛一個塊?
@interface DUTableView : UITableView
- (void) reloadDataWithCompletion:(void (^) (void))completionBlock;
@end
和...
#import "DUTableView.h"
@implementation DUTableView
- (void) reloadDataWithCompletion:(void (^) (void))completionBlock {
[super reloadData];
if(completionBlock) {
completionBlock();
}
}
@end
用法:
[self.tableView reloadDataWithCompletion:^{
//do your stuff here
}];
編輯:
注意,上面是隻有一半的解決方案。在主線程中同步更新段和行的數量以及行高,因此使用上面的代碼,當UI部分完成時,完成將會回調。但是從數據源加載的數據是異步的 - 所以這個答案並不完全是@Michal想要的。
這不就是因爲等待'reloadData'完成而遭受同樣的問題嗎?問題是表的更新是異步發生的,並且會在'[super reloadData]'完成後繼續。 – Rob
是的,你說得對。部分和行的數量以及行高被同步更新,因此部分調用是同步的。但是從數據源加載的數據是異步的。我會更新我的回答,以免誤導別人。 – bandejapaisa
最佳解決方案...感謝好友 – harshitgupta
Thx,它經過小的修改後可以使用。 – Michal
你有沒有考慮過以下? 1)根據'UITableView'的文檔,當'reloadData'被調用時,「table view只顯示那些可見的行。」所以有可能存在'tableView:willDisplayCell:'不會在最後一行被調用。 2)即使與這個問題無關,如果表視圖有一個頁腳,它可能會在單元格加載後加載。而且,'reloadData'在加載頁腳後可能會做更多的事情,在這種情況下,當'reloadData'完成時我們不會知道_exactly_。 – Antoni
如何處理底部行因爲它仍然不在屏幕上且沒有頁腳而不可見的情況。我的觀點只有10行,實際上有20(所以10屏幕)。我想滾動到底部。 –