1

UICollectionViewのセルには、contentviewロード時に背景色が白の があります。ユーザーはcontentview、ブール値(isSplitting)が に設定されていると仮定してセルを選択することにより、セルの背景色をシアンに変更できますYES

ここに画像の説明を入力

私の問題は、画面に収まるより多くのセルがあり、ユーザーがセルを選択してコンテンツビューの背景色をシアンに変更したときに発生します。

シアンのセルがスクロールして表示されなくなり、スクロールして戻ると白くなるインスタンスがあります。また、シアンではないセルがスクロールされて表示され、シアンになっている場合もあります。

セルが再利用のためにデキューされ、別の に読み込まれるときに背景色を保持していることを理解していますindexpath

ビューにスクロールすると、選択されていないセルがシアンになる問題を解決しました。ただし、スクロールして表示または非表示にすると、選択した特定のセルがシアン色を失うという問題を解決できませんでした。

これが私が持っている現在のロジックですcellForItemAtIndexPath

if (!isSplitting) {
        cell.contentView.backgroundColor = [UIColor whiteColor];
    }
    else{
        for (NSIndexPath *collectionIndexPath in [self.myCollectionView indexPathsForSelectedItems]) {
            if (indexPath == collectionIndexPath) {
                cell.contentView.backgroundColor = [UIColor cyanColor];
                break;
            }
            else{
                cell.contentView.backgroundColor = [UIColor whiteColor];
            }
        }
    }

上記の同じ for ループを使用した別の操作で目的の結果が生成されるため、正しいセルが実際に選択されていることがわかります。最初のいくつかの項目を選択し (それらをシアンに変える)、右にスクロールして 10 番目の項目を選択すると、ロジックが壊れているようです。左にスクロールすると、最初のカップルはまだシアンですが、もう一度右にスクロールすると、10 番目は白に戻ります。

4

1 に答える 1

1

== ではなく、isEqual: を使用して indexPaths を比較します。

if ([indexPath isEqual:collectionIndexPath]) {
于 2013-02-25T06:22:02.277 に答える