hachinoBlog

hachinobuのエンジニアライフ

テーブルビューのページング処理(最下セルまでスクロールしたら次の○件を自動で取得して表示する)


テーブルビューで一番下のセルまでスクロールしたら自動で次の○件を取得する処理について調べた。
この処理で一番のポイントはどのタイミングで次の○件を取得して表示を更新すべきかというところ。
まず最初に試した方法はUITableViewDelegateのwillDisplayCellメソッド。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
  //現在表示されている最下セルであれば次の件数を読み込む
}

しかしwillDisplayCellでやると挙動がもっさりしたりアクティビティが表示されなかったりと不都合が。。
(willDisplayCell内でtableView reloadDataすべきでないとの記事も)


なので次に試したのはTableviewに内包されているScrollViewのデリゲートであるscrollViewDidScrollメソッド。
このメソッドで最下セルまで表示したかどうか判定して次の件数を読みこんで表示更新とやるとうまくいきました。
最下セルまで表示したかどうかのコードは下記

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //一番下までスクロールしたかどうか
    if(self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height))
    {   
	//ここで次に表示する件数を取得して表示更新の処理を書けばOK
    }
}

挙動はGitHubにサンプルコード置いたので詳しくはこちらで
https://github.com/hachinobu/LoadMoreTableView

2013/8/6追記
Qiitaにも投稿してみた!
http://qiita.com/hachinobu/items/75c641437b9e07161488