在滚动UITableView上调用Web服务

时间:2012-12-27 10:28:41

标签: ios iphone objective-c web-services uitableview

完全困惑!!! ...

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

我的问题:

  

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

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

我发现的是:

  1. How to call web service after each certain number of data received and load it into table view
  2. Load more data from a web service when the user scrolls the UITableView
  3. how to add elements to tableview on scrolling iphone?
  4. 我很乐意在 Objective-C语言中回复您的回复。

    有什么建议吗?

4 个答案:

答案 0 :(得分:4)

将一个integer设置为0.现在使用Pull来刷新功能(Pull To refresh exmaple)。

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

第一次使用pageNumber=0pageSize=20

调用API

现在当您拉出表格时,您有一个特定的方法,您必须再次使用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++;
     }
}