滚动到表格底部时如何添加“加载更多”页面

时间:2013-08-01 17:03:45

标签: ios objective-c web-services uitableview afnetworking

我试图找出处理分页的最佳方法,或者在UItableView中将scoll设置为“加载更多......”。 我正在从Web服务加载这些数据,这非常灵活,给我一个pagesize和page参数。 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];
    }

}

我不确定如何解决这个问题。任何帮助都会很棒。提前谢谢。

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

您的解决方案存在一些缺陷:

  • 首先,您不应该使用 scrollViewDidScroll ,因为它会在滚动过程中不断触发。对于这种功能,我总是首选 scrollViewDidEndDecelerating ,每次滚动手势只会触发一次。

  • 其次,您目前正在验证用户是否位于 scrollView.frame.size.height 或更少的底部以重新加载。因此,如果您的scrollView是带有导航栏和状态栏的全屏,则iPhone 4上的此值将为416px,iPhone 5上为664px - 这是相当多的。我建议你比较 distanceFromBottom 这是一个低得多的硬编码值,例如100。

答案 2 :(得分:0)

Here is a demo(感谢原作者!),您可以轻松地将其集成到您自己的项目中!

用法:

_footer = [MJRefreshFooterView footer];
_footer.scrollView = self.tableView;
_footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
    // Load more data
};