Daljeet
Daljeet

Reputation: 1595

Call of scrollviewdidscroll method in uitableview?

I’m building an article reading app.I’m using AFNetworking third party library to fetch JSON data into the UITableView.

Let say Json link is www.example.com&page=1 gives 1-10 articles and www.example.com&page=2 gives11-20 articles and so on.

I have implemented pagination and scrollViewDidScroll method means when user scroll it gives next ten article.

I’m facing an issue when app launch and UITableView load scrollViewDidScroll method called three times but expected call once.

I’m using increment variable for pagination in scrollViewDidScroll method as i say it call three time and x value goes to 3 and give 30 articles.

When user scroll again it gives next 30 articles.i’m unable to figure out why scrollViewDidScroll method called three times when app is launched.

this is my code:

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

Upvotes: 0

Views: 4024

Answers (1)

dmerlea
dmerlea

Reputation: 946

- (void)scrollViewDidScroll: (UIScrollView*)scroll gets called a cuple of times while scrolling

You should better use:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

OR

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
   willDecelerate:(BOOL)decelerate

Upvotes: 5

Related Questions