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添加到增量并获取值。。。这是我的问题,兄弟,现在我们可以了吗。