如何在UITableView中添加分页



我从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
}

最新更新