在滚动UITableView上调用Web服务
完全混淆!!!
我有一个Web服务接受pageNumber
作为参数,并给我一些logging作为JSON响应。 (这个服务基本上实现了functionality of Paging
for Silverlight版本的functionality of Paging
。)当用户滚动UITableView
(当用户滚动时加载下20个条目(或第二个页面))时,我希望逐个加载这些页面。
我的问题 :
如何以及在哪里调用此服务以及如何计算pageNumber?
我搜查了这个,但没有得到任何满意的答案。
我发现的是:
- 如何在每接收到一定数量的数据后调用Web服务并将其加载到表视图中
- 当用户滚动UITableView时从Web服务加载更多的数据
- 如何将元素添加到滚动iphone上的tableview?
我很想在Objective-C语言中回应您的回应。
有什么build议么 ?
取一个integer
将其设置为0.现在使用Pull来刷新function( Pull刷新exmaple )。
现在在API方面,你必须设置两个额外的参数,如pagenumber
和pageSize
在第一次调用API pageNumber=0
和pageSize=20
现在,当你拉表时,你有一个特殊的方法,你必须调用API pageNumber++
和pageSize=20
再次和任何你得到的响应添加到您的NSMutableArray
。 如果你什么也没find,那就拔出拉来刷新选项
要制作无限的滚动条,您需要知道何时开始提取新项目。 有很多方法可以做到这一点,但最好的地方是钩入UITableViewDelegate的方法。 当调用cellForRowAtIndexPath:时,检查行是否是数据存储中的最后一行。 如果是,请拨打新数据,然后附加到旧数据并刷新您的视图。 你也可以挂钩到表格视图滚动,看看它X百分比滚动到底部进行此调用。
我用这个代码解决了我的问题:
- (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. } }
希望对未来的访问者有所帮助。
在.h中:
int lastPageNumber;
在.m中:
在cellForRowAtIndexPath
委托方法中
int rowNum =indexPath.row; if(rowNum%20==0) { if(rowNum/20>lastPageNumber) { //call webService lastPageNumber++; } }