我有一个Web服务接受pageNumber
作为参数,并给我一些记录作为JSON响应。 (此服务基本上实现了Silverlight版本的functionality of Paging
。)我想在用户滚动UITableView
时逐个加载这些页面(意味着当用户滚动时加载下20个条目(或第二页))
我的问题:
如何以及在何处调用此服务以及如何计算pageNumber?
我搜索了这个,但没有得到任何满意的答案。
我发现的是:
答案 0 :(得分:4)
将一个integer
设置为0.现在使用Pull来刷新功能(Pull To refresh exmaple)。
现在在API方面,你必须设置两个额外的参数,如pagenumber
和pageSize
第一次使用pageNumber=0
和pageSize=20
现在当您拉出表格时,您有一个特定的方法,您必须再次使用pageNumber++
和pageSize=20
调用API,并且无论您在响应中获得什么,都会添加到{{1} }。如果您什么都没找到,请删除pull to refresh选项
答案 1 :(得分:3)
我使用此代码解决了我的问题:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint offset = scrollView.contentOffset;
CGRect bounds = scrollView.bounds;
CGSize size = scrollView.contentSize;
UIEdgeInsets inset = scrollView.contentInset;
float y = offset.y + bounds.size.height - inset.bottom;
float h = size.height;
float reload_distance = 10;
if(y > h + reload_distance)
{
lastPageNumber++;
[[NSUserDefaults standardUserDefaults] setInteger:lastPageNumber forKey:@"PageNumber"];
// Call the method.
}
}
希望,这将对未来的访客有所帮助。
答案 2 :(得分:2)
要制作无限卷轴,您需要知道何时开始获取新项目。有很多方法可以做到这一点,但最好的方法是挂钩UITableViewDelegate的方法。调用cellForRowAtIndexPath:时,请检查该行是否是数据存储中的最后一行。如果是,请调用新数据,然后将其附加到旧数据并刷新视图。您还可以挂钩表格视图滚动条,以查看X%滚动到底部以进行此调用。
答案 3 :(得分:1)
在.h:
int lastPageNumber;
在.m:
在cellForRowAtIndexPath
委托方法
int rowNum =indexPath.row;
if(rowNum%20==0)
{
if(rowNum/20>lastPageNumber)
{
//call webService
lastPageNumber++;
}
}