我有一个UICollectionView
,每行包含2个单元格。现在,我需要启用分页,当UICollectionView
的最后一个单元出现时,我需要获取另一组记录。我怎样才能完成这件事。
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cc" forIndexPath:indexPath];
if (indexPath.row == [mydictionary count]) {
pg = pg +1;
[self loadtheservice:pg];
}
return cell;
}
根据我上面的代码,[self loadtheservice:pg]
被多次调用。我认为原因是最后一个单元格长visible
,cellForItemAtIndexPath
正在调用加载服务方法。我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用willDisplayCell
方法检查iOS8中可用的条件
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
Bellow IOS8: 一般我们使用以下。是的它会调用每个卷轴末端,因此可能不是首选。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
因此,如果您不想要,您可以使用UICollectionViewDelegateFlowLayout委托来管理它。我给出了粗略的想法。您可以根据您的要求实施。使用以下,
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
if(paging does not complete ) {
// you can give some nice gui to load more to notify user. if you dont want to notify user, just return with 1px height size
} else {
return zero size
}
}
您可以通过以下分组管理该视图
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
if(kind == UICollectionElementKindSectionFooter) {
// here you can add your nice load more functionality with some custom view . if you dont need load more view, you can add 1px height footer view and manage that if paging completed
}
}
答案 1 :(得分:0)
使用willDisplayCell方法检查iOS8中可用的条件
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
对于iOS8以下版本,您需要在scrollViewDidEndDecelerating方法上检查条件,如下所示
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height;
if (bottomEdge >= self.collectionView.collectionViewLayout.collectionViewContentSize.height) {
//here call API to load next page records
}
}