Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当用户滚动到tableview框架底部时,加载更多单元格_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 当用户滚动到tableview框架底部时,加载更多单元格

Ios 当用户滚动到tableview框架底部时,加载更多单元格,ios,objective-c,uitableview,Ios,Objective C,Uitableview,当用户像这样滚动到底部时,我正在向表格视图添加新数据 - (void)scrollViewDidScroll:(UIScrollView *)aScrollView { float height = self.itemListTableView.frame.size.height; float contentYoffset = aScrollView.contentOffset.y; float distanceFromBottom = aScr

当用户像这样滚动到底部时,我正在向
表格视图添加新数据

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
        float  height = self.itemListTableView.frame.size.height;
        float contentYoffset = aScrollView.contentOffset.y;
        float distanceFromBottom = aScrollView.contentSize.height - contentYoffset;
        if (distanceFromBottom < height) {
        NSLog(@" you reached end of the table");
        isTableScrolledToBottom = YES;
   }else{
        isTableScrolledToBottom = NO;
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"CellIdentifier";
    ListViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if(cell==nil){
      cell = [[ListViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }
       //Assign values to labels here..

    if (isTableScrolledToBottom) {

        if (indexPath.row == [apiMutableArray count]-1)
        {
            // Call the API
            NSLog(@"Call the api");
            int pgn = [self.currentPageNumber intValue];
            pgn = pgn+1;
            self.currentPageNumber = [NSNumber numberWithInt:pgn];
            NSLog(@"incremented page number : %@",self.currentPageNumber);
            NSMutableDictionary *mutableDict = [self.poPostDict mutableCopy];
            [mutableDict setObject:self.currentPageNumber forKey:@"pageno"];
            self.poPostDict = [mutableDict mutableCopy];

            [self addLoaderViewAtBottom];
            [self loadPOData:self.poPostDict]; 
        }
    }
 return cell;
}
-(无效)scrollViewDidScroll:(UIScrollView*)aScrollView{
浮动高度=self.itemListTableView.frame.size.height;
float contentYoffset=aScrollView.contentOffset.y;
float distance from bottom=aScrollView.contentSize.height-contentYoffset;
if(与底部的距离<高度){
NSLog(@“您到达了表的末尾”);
isTableScrolledToBottom=是;
}否则{
isTableScrolledToBottom=否;
}
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
静态NSString*CellIdentifier=@“CellIdentifier”;
ListViewCell*cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil){
cell=[[ListViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier];
}
//在此处为标签指定值。。
如果(isTableScrolledToBottom){
if(indexPath.row==[apiMutableArray计数]-1)
{
//调用API
NSLog(@“调用api”);
int pgn=[self.currentPageNumber intValue];
pgn=pgn+1;
self.currentPageNumber=[NSNumber numberwhithint:pgn];
NSLog(@“递增页码:%@”,self.currentPageNumber);
NSMutableDictionary*mutableDict=[self.poPostDict mutableCopy];
[mutableDict setObject:self.currentPageNumber forKey:@“pageno”];
self.poPostDict=[mutableDict mutableCopy];
[self-AddLoaderViewBottom];
[self-loadPOData:self.poPostDict];
}
}
返回单元;
}
现在,如果表视图中的数据足够大,用户将滚动到底部,并按预期从api中获取数据。但是,当我筛选此表时,假设我只获取一行数据。 在这种情况下,即使我可以看到表中只有一个单元格,如果我尝试滚动表,api请求也会被命中。 如何真正知道用户是否已滚动到其
之外,并一直滚动到
滚动视图的
结尾,以便只有在这种情况下,我才能获取数据


注意:-使用当前技术,如果只存在一行,并且我尝试滚动,则api调用将不停地连续命中。

尝试此解决方案,它始终对我有效

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        let lastElement = dataSource.count - 1
        if indexPath.row == lastElement {
            // logic here
            }    
    }

如果您仍有疑问,请询问。

解决方案已存在于堆栈中。你试过任何一种吗?我在stack本身就发现了这些技术。但是如果我过滤表,解决方案似乎不起作用。你不需要过滤数据,你必须添加数据。“过滤”选项是应用程序中的选项之一。如果用户根据他/她喜欢的某些标准过滤数据,数据源已减少。现在,如果我只获得2-3个元素,并尝试滚动表格。当我滚动到此结束时,api请求被命中。在加载更多数据到旧数据后,您需要添加新数据。我需要有关相同问题的帮助,我有一个图像的JSON响应,它有193个数据,现在它可以在未来增加,所以目前我想一次只显示20个单元格,当用户到达20个单元格并滚动时,我想在下面显示另外20个单元格,这样图像加载会更快。我想要像facebook一样的分页,我不想在调用委托方法时提前将pagecount添加到增量并获取值。。。这是我的问题,兄弟,现在我们可以了吗。