如何在UITableView中添加分页?

我从第一页parsingAPI的数据,并将其添加到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; } 

有很多方法可以像下面这样实现这个function:

  • 首先,您需要创build一个在TableView Delegates和DataSaurce中加载的主NSMutableArray
  • 现在在你的api调用中,你需要在主数组中添加那个logging。
  • 在最后一个单元格或表格tableview您可以再次使用基于API的下一页url调用它,并在每个呼叫上重新加载表格
  • 你可以在github上loadMore许多thirdParty库:

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]; } 

声明一个全局variablespagingCount并在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 }