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

我试图找出处理分页的最佳方法或在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]; } } 

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

以下代码段将检测用户是否滚动到滚动视图的底部。
您可以调用该方法从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 } } 

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

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

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

这是一个演示 (感谢原作者!),您可以轻松地将它集成到您​​自己的项目中!

用法:

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