使用scrollViewDidScroll方法在UITableView中实现分页?

时间:2014-09-17 14:59:07

标签: ios json uitableview pagination afnetworking

我正在构建一篇阅读app的文章。我正在使用AFNetworking第三方库将JSON数据提取到UITableView中。

让我们说Json链接是www.example.com& page = 1给出1-10篇文章,www.example.com& page = 2给出11-20篇文章等等。

我已经实现了分页和scrollViewDidScroll方法意味着当用户滚动它时会给出下一篇文章。

我在app启动时遇到问题,UITableView加载scrollViewDidScroll方法,调用三次但预期调用一次。

我在scrollViewDidScroll方法中使用增量变量进行分页,因为我说它调用了三次,x值变为3并且给出了30篇文章。

当用户再次滚动时,会显示接下来的30篇文章。我无法弄清楚为什么在启动应用时,scrollViewDidScroll方法会调用三次。

这是我的代码:

      - (void)viewDidLoad
       {
         [super viewDidLoad];
          tempJson = [[NSMutableArray alloc] init];
           [self loadNinjas];
       }

        - (void)loadNinjas {

              NSString *jsonLink=[NSString stringWithFormat:@"www.example.com&page=%d",x];
              NSURL *url = [[NSURL alloc] initWithString:jsonLink];
              NSURLRequest *request = [NSURLRequest requestWithURL:url];
              AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
        operation.responseSerializer = [AFJSONResponseSerializer serializer];
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSArray *jsonArray = (NSArray *)responseObject;
            for (NSDictionary *dic in jsonArray) {
            Json *json = [[Json alloc] initWithDictionary:dic];
            [tempJson addObject:json];
            }
              self.jsons = [[NSArray alloc] initWithArray:tempJson];
              [self.tableView reloadData];
              } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
               UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:[error localizedDescription]
                                                   delegate:nil
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil];
               [alertView show];
               }];
             [operation start];
            }

        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
           {
           return self.jsons.count ;

            }

          - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
             {
               static NSString *Cellidentifier1 = @"ysTableViewCell";

               ysTableViewCell *cell1 = [tableView 

               dequeueReusableCellWithIdentifier:Cellidentifier1 forIndexPath:indexPath];
               cell1.TitleLabel1.text = [self.jsons[indexPath.row] title];

               cell1.AuthorLabel1.text = [self.jsons[indexPath.row] author];
              [cell1.ThumbImage1 setImageWithURL:[NSURL URLWithString:

               [self.jsons[indexPath.row] a_image]]];
               return cell1;}
             - (void)scrollViewDidScroll: (UIScrollView*)scroll {

                CGFloat currentOffset = scroll.contentOffset.y;
                CGFloat maximumOffset = scroll.contentSize.height -       scroll.frame.size.height;

                self.tableView.contentInset = UIEdgeInsetsMake(65, 0, 0, 0);
                if (maximumOffset - currentOffset <= -60.0) {
                 x++;

                [self loadNinjas];
                [self.tableView addInfiniteScrollingWithActionHandler:^{
                 }];
              [self.tableView reloadData];
             }
          }

1 个答案:

答案 0 :(得分:0)

这是一个简单的代码,用50个单元初始化tableView,当用户向下滚动页面时,每次到达表格末尾10个单元格的单元格时,会向tableView添加20个新单元格。

int i;
int lastSeen;

- (void)viewDidLoad {
    [super viewDidLoad];

    i = 50;
    lastSeen = 0;
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return i;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath];

    cell.textLabel.text = [NSString stringWithFormat:@"%ld", (long)indexPath.row];

    lastSeen = (lastSeen < indexPath.row) ? indexPath.row : lastSeen;

    return cell;
}
- (void)scrollViewDidScroll: (UIScrollView*)scroll {
    if (lastSeen >= (i - 10)) {
        i += 20;

        //load new data here.

        [self.tableView reloadData];

    }
}