2013-08-01 64 views
1

我试图找出在UItableView中滑动到底部时处理分页或“加载更多...”的最佳方法。 我从Web服务加载这些数据,这非常灵活,给我一个pagesize和page参数。页面大小定义了每次拉回的结果数量,而页面参数定义了搜索结果组,例如:如何在滚动到表底部时添加“加载更多”页面

page = 1(返回结果1-10)。

页= 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]; 
    } 

} 

我真的不知道该如何处理这个。任何帮助都会很棒。提前致谢。

+0

如果你不喜欢重新发明轮子,看看开源https://github.com/samvermette/SVPullToRefresh,这将给你无限1行代码滚动。或者查看文件UIScrollView + SVInfiniteScrolling.m,它会告诉你这个实现。 –

回答

0

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

  • 首先,你不应该使用scrollViewDidScroll,因为它是不断地一直滚动解雇。对于这种功能,我一直倾向于选择scrollViewDidEndDecelerating,这样每个滚动手势只会触发一次。

  • 其次,您目前正在验证用户是否在scrollView.frame.size.height或更少从底部重新加载。因此,如果您的scrollView是带有导航栏和状态栏的全屏幕,则iPhone 4上的此值将为416px,iPhone 5上的值为664px--这非常多。我劝你还是比较distanceFromBottom这低得多,硬编码值,如果用户滚动滚动视图的底部,如100

+0

需要回答。 是的,我知道,但当我滚动,而不是在底部,它加载,我滚动,我加载...,所以,我想当我滚动到底部,我加载。 你有一些例子吗? P/S:对不起我的英语。 – user2575045

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 
    } 
} 
0

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

用法:

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