我从API解析第一页的数据并将其添加到UITableView
,现在页面可以是多个,比如说100,我也从API获得总页数。 但是我将如何在 tableView 中为每个页面实现它,并在滚动时显示指示器。看看我的代码
NSURL *theURL = [NSURL URLWithString:@"http://qa.networc.in:1336/api/dispatcher/rideScheduled/:1"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];
//Specify method of request(Get or Post)
[theRequest setHTTPMethod:@"GET"];
//Pass some default parameter(like content-type etc.)
[theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[theRequest setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:token forHTTPHeaderField:@"x-access-token"];
NSURLResponse *theResponse = NULL;
NSError *theError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];
if (responseData == nil)
{
return;
}
NSDictionary *dataDictionaryResponse = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&theError];
NSLog(@"url to send request= %@",theURL);
NSLog(@"%@",dataDictionaryResponse);
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:theRequest
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Response:%@ %@n", response, error);
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}
dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"data"];
NSArray *total = [dictionary objectForKey:@"total"];
NSLog(@"latlop %@", total);
NSArray *IDArray = [dictionary objectForKey:@"docs"];
for (NSDictionary *Dict in IDArray)
{
NSMutableDictionary *temp = [NSMutableDictionary new];
[temp setObject:[Dict objectForKey:@"_id"] forKey:@"_id"];
NSLog(@"temp %@", temp );
NSString *booknumber = [Dict objectForKey:@"bookingNumber"];
if([booknumber length] != 0)
[temp setObject:booknumber forKey:@"bookingNumber"];
NSMutableDictionary *stp1 = [Dict objectForKey:@"stop1"];
if ([[stp1 allKeys] containsObject:@"address"]) {
[temp setObject:[stp1 objectForKey:@"address"] forKey:@"address"];
];
}
NSMutableDictionary *stp2 = [Dict objectForKey:@"stop2"];
if ([[stp2 allKeys] containsObject:@"address"]) {
[temp setObject:[stp2 objectForKey:@"address"] forKey:@"address1"];
NSArray *latlongstp2 = [stp2 objectForKey:@"location"];
[temp setObject:[latlongstp2 objectAtIndex:0] forKey:@"latitude"];
[temp setObject:[latlongstp2 objectAtIndex:1] forKey:@"longitude"];
}
NSMutableDictionary *currentloc = [Dict objectForKey:@"currentLocation"];
if ([[currentloc allKeys] containsObject:@"address"]) {
[temp setObject:[currentloc objectForKey:@"address"] forKey:@"address1"];
}
[getid addObject:temp];
}
if (getid.count>0)
{
[self updateTable];
}
}];
[task resume];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1; //count of section
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [getid count];
}
- (void)tableView:(UITableView *)tableView willDisplayCell: (UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [getid count] - 1 ) {
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ScheduleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.BookingId.text = [[getid objectAtIndex:indexPath.row]objectForKey:@"_id"];
cell.BookingNo.text = [[getid objectAtIndex:indexPath.row]objectForKey:@"bookingNumber"];
cell.stop1.text = [[getid objectAtIndex:indexPath.row]objectForKey:@"address"];
cell.stop2.text = [[getid objectAtIndex:indexPath.row] objectForKey:@"address1"];
cell.Currentloc.text = [[getid objectAtIndex:indexPath.row] objectForKey:@"address"];
return cell;
}
有很多方法可以实现这一点,如下所示:
- 首先,您需要创建一个全局
NSMutableArray
,该加载TableView
委托和DataSaurce
。 - 现在,在您的 api 调用中,您需要在全局数组中添加该记录。
- 在最后一个单元格或
tableview
上,您可以根据您的 API 使用下一页 URL 再次调用它,并在每次调用时重新加载表 - 您可以使用 github 上可用的更多第三方库进行加载:
https://github.com/OpenFibers/DragRefreshAndLoadMoreTableDemo
https://github.com/Abizern/PartialTable
https://github.com/robertmryan/UITableView-Bottom-Refresh
根据您的代码:
在 .h 类中
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
NSURL* nextURL;
int currentPage;
}
在。M级
- (void)viewDidLoad {
currentPage = 1;
[self LoadData];
[super viewDidLoad];
}
-(void)LoadData
{
NSURL *theURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://qa.networc.in:1336/api/dispatcher/rideScheduled/:%d",currentPage]];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];
//Specify method of request(Get or Post)
[theRequest setHTTPMethod:@"GET"];
//Pass some default parameter(like content-type etc.)
[theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[theRequest setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:token forHTTPHeaderField:@"x-access-token"];
NSURLResponse *theResponse = NULL;
NSError *theError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];
if (responseData == nil)
{
return;
}
NSDictionary *dataDictionaryResponse = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&theError];
NSLog(@"url to send request= %@",theURL);
NSLog(@"%@",dataDictionaryResponse);
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:theRequest
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Response:%@ %@n", response, error);
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}
currentPage ++;
dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"data"];
NSArray *total = [dictionary objectForKey:@"total"];
NSLog(@"latlop %@", total);
[getid addObjectsFromArray:total];
[self updateTable];
}];
[task resume];
}
声明一个全局变量 pagingCount 并在 viewdidload 中使用 1 初始化它。
在数据提取程序方法中进行此更改。
NSURL *theURL = [NSURL URLWithString:@"http://qa.networc.in:1336/api/dispatcher/rideScheduled/:%d",pagingCount];
现在,您将传递此分页计数,并在最后一个单元格即将显示时调用数据提取器方法。将寻呼计数更新为 +1
- (void)tableView:(UITableView *)tableView willDisplayCell: (UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [getid count] - 1 ) {
//call your method of fetching data with paging which will be increased with 1
//increase the pagingCount
pagingCount += 1;
//call your data fetcher
}
}
我使用以下代码完成了相同的操作
#pragma mark --- UIScrollView Delegate Method ---
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
float offset = (scrollView.contentOffset.y - (scrollView.contentSize.height - scrollView.frame.size.height));
btnloadMore.hidden = YES;
if (offset >= 0 && offset <= 105)
{
if(isLoadMoreCheck == TRUE)
{
NSLog(@"Hi");
//btnloadMore.hidden = NO;
[self addMoreData];
}
}
NSLog(@"Scroll : %f",offset);
}
- (void)addMoreData
{
isLoadMoreCheck = FALSE;
isLoadMore = TRUE;
currentPage++;
[self getNewsFeeds:currentPage];// Here you can call your method for load next page data
}