在滚动UITableView上调用Web服务

完全混淆!!!

我有一个Web服务接受pageNumber作为参数,并给我一些logging作为JSON响应。 (这个服务基本上实现了functionality of Paging for Silverlight版本的functionality of Paging 。)当用户滚动UITableView (当用户滚动时加载下20个条目(或第二个页面))时,我希望逐个加载这些页面。

我的问题 :

如何以及在哪里调用此服务以及如何计算pageNumber?

我搜查了这个,但没有得到任何满意的答案。

我发现的是:

  1. 如何在每接收到一定数量的数据后调用Web服务并将其加载到表视图中
  2. 当用户滚动UITableView时从Web服务加载更多的数据
  3. 如何将元素添加到滚动iphone上的tableview?

我很想在Objective-C语言中回应您的回应。

有什么build议么 ?

取一个integer将其设置为0.现在使用Pull来刷新function( Pull刷新exmaple )。

现在在API方面,你必须设置两个额外的参数,如pagenumberpageSize

在第一次调用API pageNumber=0pageSize=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++; } }