0

我正在做一个项目,在第一次 web 服务调用中,我们得到了大约 20 个数据,我们正在将这些数据加载到表视图中,一旦我们开始向上滚动查看,当它达到 20 个数字时,我们需要为下一个 20 个调用服务,就像脸书一样。

我们需要为接下来的每 20 次执行此操作,直到数据结束并从上次调用的最后一个数据加载到 tableview,当我们向下滚动查看以前的数据时,我们可以看到所有数据。当我们在第 20 个单元格之后向上滚动表格时,需要显示“更多数据加载”。

请帮我 !

谢谢,

4

2 回答 2

1

只需创建私有偏移变量并在每次成功加载时增加它。
假设这是您获取 GET 参数的 Web 服务:

http://server.com/?offset=0&amount=20

您的 Objective C 代码将如下所示:

在头文件中:

@interface YourClass
{
   uint _offset;
}
@end

在实现文件中:

- (void)viewDidLoad {
    _offset = 0;
}

- (void)loadFromServer {
    NSString *stringURL = [NSString stringWithFormat:@"%@/%@", kServer, _offset];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringURL]];
    NSString *params = [NSString stringWithFormat:@"offset=%i&amount=20", _offset];
    NSData *postData = [params dataUsingEncoding:NSUTF8StringEncoding];

    request.HTTPMethod = @"GET";
    request.HTTPBody = postData;

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    if (error) {
        NSLog(@"Error: %@", error);
    }else {
        NSError *jsonError;
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError];

        _offset += 20;
    }
}];

}

于 2012-11-13T08:19:27.213 回答
1

添加UITableViewDelegate方法willDisplayCell

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *) cell     forRowAtIndexPath:(NSIndexPath *)indexPath
{
    int count = [yourDataSource count];;

    if(indexPath.row == count - 1) // If going to display last row available in your source
    {
        //totalPageCount is the total pages available in the server. This needs to be stored on initial server call
        //currentIndex is the index of page last retreived from server. This needs to be incremented every time new page is retreived.
        if(currentIndex <= totalPageCount) 
        {
            [self getContentsForPage:currentIndex];
        }
        else
        {
            self.tableView.tableFooterView = nil; //You can add an activity indicator in tableview's footer in viewDidLoad to show a loading status to user.
        }

    }
}
于 2012-11-15T06:40:17.043 回答