1. ホーム
  2. ios

[解決済み] UICollectionView 現在の可視セルインデックス

2022-06-13 18:40:15

質問

私は UICollectionView を初めて使用します。 私は UICollectionView のサイズを同じにすることで、一度に表示されるセルが1つだけになるようにしています。

問題です。 現在、ユーザがスクロールする際に UICollectionView をスクロールしたときに、どのセルが表示されているかを知る必要があります。また、変更時に他のUI要素を更新する必要があります。私はこのための任意のデリゲートメソッドを見つけられませんでした。どのように私はこれを達成することができますか?

コードです。

[self.mainImageCollection setTag:MAIN_IMAGE_COLLECTION_VIEW];
[self.mainImageCollection registerClass:[InspirationMainImageCollectionCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[self.mainImageFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.mainImageFlowLayout setMinimumInteritemSpacing:0.0f];
[self.mainImageFlowLayout setMinimumLineSpacing:0.0f];
self.mainImageFlowLayout.minimumLineSpacing = 0;
[self.mainImageCollection setPagingEnabled:YES];
[self.mainImageCollection setShowsHorizontalScrollIndicator:NO];
[self.mainImageCollection setCollectionViewLayout:self.mainImageFlowLayout];

試してみたこと

として UICollectionView に準拠し UIScrollView でスクロールを終了すると UIScrollViewDelegate メソッド

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

しかし、上記の関数で UICollectionView ?

どのように解決するのですか?

collectionView visibleCells]メソッドを使用すると、すべてのvisibleCellsの配列を取得することができます。このメソッドは

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    for (UICollectionViewCell *cell in [self.mainImageCollection visibleCells]) {
        NSIndexPath *indexPath = [self.mainImageCollection indexPathForCell:cell];
        NSLog(@"%@",indexPath);
    }
}

Swift 5にアップデートしました。

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    for cell in yourCollectionView.visibleCells {
        let indexPath = yourCollectionView.indexPath(for: cell)
        print(indexPath)
    }
}