2

完全糊涂了!!!...

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

我的问题 :

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

我对此进行了搜索,但没有得到任何满意的答案。

我发现的是:

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

我很想在这里用Objective-C 语言回答你。

有什么建议么 ?

4

4 回答 4

4

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

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

在第一次你调用 APIpageNumber=0pageSize=20

现在,当您拉出表格时,您就有了一个特定的方法,您必须在其中一次又一次地调用 API,pageNumber++并且pageSize=20将响应中的任何内容添加到您的NSMutableArray. 如果您什么也没找到,请删除拉动刷新选项

于 2012-12-27T11:51:33.583 回答
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.
    }
}

希望对以后的访问者有所帮助。

于 2013-04-04T06:42:40.057 回答
1

要制作无限滚动器,您需要知道何时开始获取新项目。有很多方法可以做到这一点,但最好的地方是挂钩到 UITableViewDelegate 的方法。调用 cellForRowAtIndexPath: 时,检查该行是否是数据存储中的最后一行。如果是,请调用新数据,然后将其附加到旧数据并刷新您的视图。您还可以挂钩到表视图滚动器,以查看它何时滚动到底部以进行此调用。

于 2012-12-27T10:37:31.887 回答
1

在 .h 中:

int lastPageNumber;

在 .m 中:

cellForRowAtIndexPath委托方法中

int rowNum =indexPath.row;
if(rowNum%20==0)
{
     if(rowNum/20>lastPageNumber)
     {
        //call webService
        lastPageNumber++;
     }
}
于 2012-12-27T11:43:22.150 回答