使用API​​滚动时在tableview中重新加载数据

时间:2017-03-17 05:04:55

标签: objective-c

如何在滚动时重新加载表格中的数据?

如果我有一个网址" http:.......& start = 0& limit = 50"。

如何使用50增加开始和限制值来重新加载表中的数据。

有人能为此找到解决方案吗?

2 个答案:

答案 0 :(得分:0)

  1. 您需要在表视图中为此实现加载更多功能。为了这样做,您需要在表格到达最后一个可以调用api的单元格时滚动表格视图的索引增加页码并在获得api的积极响应后将新记录添加到数组中。

  2. 请参阅以下代码以获取更多理解。

  3. 变量初始化

    @interface ExampleListVC (){
        BOOL hasNextPage,isLoadingNextPage;
        int currentPage;
        NSMutableArray *arrTableData;
    }
    @end
    
  4. 在viewDidLoad方法

    arrTableData = [[NSMutableArray alloc]init];
    currentPage=-1;
    hasNextPage = YES;
    
  5. 在tableView numberOfRowsInSection方法

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
      int count = (int)arrTableData.count;
      if (hasNextPage)
      {
         count++;
      }
      return count;
    }
    
  6. 在cellForRowAtIndexPath方法

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
       UITableViewCell *cell = nil;
       if (indexPath.row<arrTableData.count)
       {
         //Load TableviewCell you intend to show
       }
       else
       {
          //Show loading cell
          cell = [self loadingCell:indexPath];
          if (!isLoadingNextPage)
          {
            [self fetchData];
          }
       }
       return  cell;
     }
    
  7. 加载单元代码

    -(UITableViewCell *) loadingCell :(NSIndexPath *)indexPath
    {
     UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:nil];
       cell.backgroundColor = [UIColor clearColor];
     UIActivityIndicatorView *activityIndicatorView =[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
     activityIndicatorView.color = [UIColor blackColor];
     activityIndicatorView.center = CGPointMake(self.tblView.center.x, cell.center.y);
     [cell.contentView addSubview:activityIndicatorView];
     [activityIndicatorView startAnimating];
    
     cell.userInteractionEnabled = NO;
     return cell;
    }
    
  8. Api通话实施

    -(void)fetchData
    {
       isLoadingNextPage = YES;
       if (currentPage==-1)
          currentPage=0;
       //API Call
       {
     DLog(@"API Call Response = %@",response);
     isLoadingNextPage = NO;
     if (response == nil)
     {
         hasNextPage=NO;
         return;
     }
    
     if (success)
     {
         if (hasNextPage)
         {
             currentPage++;
         }
         [arrTableData addObjectsFromArray:response];
     }
     else
     {
         hasNextPage=NO;
     }
     //Reload tableview
    }];
    }
    
  9. 替代解决方案 使用SVPullToRefresh库集成无限滚动。 https://github.com/samvermette/SVPullToRefresh

答案 1 :(得分:0)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if(self.comptabl.contentOffset.y >= (self.comptabl.contentSize.height - self.comptabl.bounds.size.height))
    {
        if(isPageRefreshing==NO){
            isPageRefreshing=YES;
            [appDelegate showIndicator:nil view1:self.view];
            start=start+50;

            [self makeRequest:start];
            [self.comptabl reloadData];
            NSLog(@"called %d",start);
        }



    }
}

我正在使用这种方法但是在任何时候该值都是以50为增量..我可以设置限制值