1

UItableView で一番下にスクロールするときに、ページングまたは「もっと読み込む...」を処理する最良の方法を見つけようとしています。このデータを Web サービスから読み込んでいます。これは非常に柔軟で、ページサイズとページ パラメータを指定できます。Pagesize は毎回返される結果の数を定義しますが、page パラメーターは検索結果のグループを定義します。次に例を示します。

page=1 (結果 1 ~ 10 を返します)。

page=2 (結果 11 ~ 20 を返す)

毎回、下にスクロールすると、サーバーに1回リクエストすると、サーバーは1ページ(1、2、3、4 ....)と結果を返します。私はこのようにロードしようとしました

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat height = scrollView.frame.size.height;

    CGFloat contentYoffset = scrollView.contentOffset.y;

    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
    if(distanceFromBottom < height)
    {
        //to do something
        [self.viewController getPics];
    }

}

これに対処する方法がよくわかりません。どんな助けでも素晴らしいでしょう。前もって感謝します。

4

3 に答える 3

1

次のスニペットは、ユーザーがスクロール ビューの一番下までスクロールしたかどうかを検出します。
メソッドを呼び出して、if ステートメントの本体でサーバーから (非同期) データを取得できます。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if ([scrollView contentOffset].y == [scrollView contentSize].height - [scrollView frame].size.height) {
        // The user did scroll to the bottom of the scroll view
    }
}
于 2013-08-01T17:24:45.043 に答える
0

ここにデモがあります (元の作者に感謝します!)。自分のプロジェクトに簡単に統合できます!

使用法:

_footer = [MJRefreshFooterView footer];
_footer.scrollView = self.tableView;
_footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
    // Load more data
};
于 2014-04-22T03:42:27.093 に答える
0

あなたのソリューションにはいくつかの欠陥があります。

  • まず、scrollViewDidScrollはスクロール中に継続的に発生するため、使用しないでください。この種の機能については、スクロール ジェスチャごとに 1 回だけトリガーされるscrollViewDidEndDeceleratingを常に優先してきました。

  • 第二に、現在、ユーザーがスクロールビュー.frame.size.height以下にあることを確認してリロードします。したがって、scrollView が navbar とステータス バーを含む全画面表示の場合、この値は iPhone 4 では 416px、iPhone 5 では 664px になります。これはかなりの量です。100 などのはるかに低い、ハードコードされた値であるdistanceFromBottomを比較することをお勧めします。

于 2013-08-01T17:17:42.380 に答える