我正在做一个项目,在第一次 web 服务调用中,我们得到了大约 20 个数据,我们正在将这些数据加载到表视图中,一旦我们开始向上滚动查看,当它达到 20 个数字时,我们需要为下一个 20 个调用服务,就像脸书一样。
我们需要为接下来的每 20 次执行此操作,直到数据结束并从上次调用的最后一个数据加载到 tableview,当我们向下滚动查看以前的数据时,我们可以看到所有数据。当我们在第 20 个单元格之后向上滚动表格时,需要显示“更多数据加载”。
请帮我 !
谢谢,
我正在做一个项目,在第一次 web 服务调用中,我们得到了大约 20 个数据,我们正在将这些数据加载到表视图中,一旦我们开始向上滚动查看,当它达到 20 个数字时,我们需要为下一个 20 个调用服务,就像脸书一样。
我们需要为接下来的每 20 次执行此操作,直到数据结束并从上次调用的最后一个数据加载到 tableview,当我们向下滚动查看以前的数据时,我们可以看到所有数据。当我们在第 20 个单元格之后向上滚动表格时,需要显示“更多数据加载”。
请帮我 !
谢谢,
只需创建私有偏移变量并在每次成功加载时增加它。
假设这是您获取 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;
}
}];
}
添加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.
}
}
}