待機

2011-06-27 10 views
4

可能性の重複:
Get notified when UITableView has finished asking for data?待機

は、テーブルビューの仕上げはreloadDataメソッドの後にそのデータを再ロードするときに通知を取得することが可能ですか?または、テーブルビューの終了が再ロードされるまで待つことは可能ですか?

おかげ

答えて

2

非常に簡単な解決策はあり終わりで終了最後の反復が

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if([indexPath row] == lastRow){ 
      any code you want 

    } 
} 
そこにコードを追加した後は、デリゲート

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

の最後の反復であるかどうかを確認することです

ありがとう

+0

Thx、小さな変更後に動作します。 – Michal

+20

あなたは以下を考慮しましたか? 1) 'UITableView'のドキュメントによると、' reloadData'が呼び出されると、 "テーブルビューは表示されている行だけを再表示します。したがって、 'tableView:willDisplayCell:'は最後の行で呼び出されない可能性があります。 2)この質問とは関係ありませんが、テーブルビューにフッターがある場合は、セルが読み込まれた後に読み込まれる可能性があります。さらに、 'reloadData'はフッタをロードした後にさらに多くの処理を行うことがあります。この場合、' reloadData'が終了したときには正確にはわかりません。 – Antoni

+0

下部の行が表示されず、画面がオフであり、フッターがないため、この問題を解決する方法。私のビューは10行しか保持しておらず、実際には20個(したがって10個のスクリーン)です。私は下の方にスクロールしたい。 –

1

ブロック?

@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 
             }]; 

EDIT:上記の半分しか解決すること

注意。セクションと行の数と行の高さはメインスレッド上で同期して更新されるため、上記のコードを使用すると、UI部分の一部が完了したときに補完がコールバックされます。しかし、データソースからのデータロードは非同期です。だから、本当にこの答えは、@ Meichalが望んだものではありません。

+5

これは 'reloadData'が終了するのを待つのと同じ問題を抱えていませんか?問題は、テーブルの更新が非同期的に起こり、 '[super reloadData]'が実行された後も継続することです。 – Rob

+0

ええ、そうです。セクションと行の数と行の高さは同期して更新されるため、呼び出しの一部は同期しています。しかし、データソースからのデータロードは非同期です。他人を欺いてはいけないように私の答えを更新します。 – bandejapaisa

+0

ベストソリューション...ありがとうございました。 – harshitgupta