我试图找出处理分页的最佳方法,或者在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];
}
}
我不确定如何解决这个问题。任何帮助都会很棒。提前谢谢。
答案 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
};