I am trying to implement "infinite scroll" with UICollectionView.
I do this by buffering my dataset like this tutorial
and then implementing didEndDisplayingCellof UICollectionViewDelegateas follows:
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{
if (self.galleryArray.count > 0) {
NSIndexPath *newIndexPath = indexPath;
if (self.specialHeaderView.bannerView.scrollDirection == left) {
newIndexPath = [NSIndexPath indexPathForItem:indexPath.row - 1 inSection:indexPath.section];
} else if (self.specialHeaderView.bannerView.scrollDirection == right) {
newIndexPath = [NSIndexPath indexPathForItem:indexPath.row + 1 inSection:indexPath.section];
}
if (newIndexPath.row == (self.galleryArray.count - 1)) {
newIndexPath = [NSIndexPath indexPathForItem:1 inSection:indexPath.section];
[self.bannerCollectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];
return;
}
if (newIndexPath.row == 0) {
newIndexPath = [NSIndexPath indexPathForItem:([self.galleryArray count] -2) inSection:indexPath.section];
[self.bannerCollectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];
}
}
}
The problem is that whenever a method didEndDisplayingCellis called and a collection request requests a cell through the delegate method CellForItemAtIndexPath, the cell is returned hidden.
Here is my implementation CellForItemAtIndexPath:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
SpecialBannerCell *specialBannerCell = (SpecialBannerCell *)[collectionView dequeueReusableCellWithReuseIdentifier:GalleryCellIdentifier forIndexPath:indexPath];
if (specialBannerCell.hidden) {
}
Benefit *benefit = [self.galleryArray objectAtIndex:indexPath.row];
[specialBannerCell.imageBanner setImageWithURL:[NSURL URLWithString:benefit.imageIphoneUrl] placeholderImage:[UIImage imageNamed:@"photo_loader"]];
return specialBannerCell;
}
What am I doing wrong here?
source
share