3

UICollectionView で 1 つの UICell をタップしてから、UICollectionView を上下にスクロールすると、複数のセルが選択されていることがわかります。タップされていない選択された他のセルは、UICollectionView レイアウト全体でランダムに選択されているようです。UICollectionView に 3 列のセルと多くの行があります。

私のコードには次のものがあります。

- (void)collectionView:(UICollectionView *)myCV didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    LogInfo(@"Item Selected");
    // highlight the cell user tapped on
    UICollectionViewCell  *cell = [myCV cellForItemAtIndexPath:indexPath];
    [cell.layer setBorderWidth:10.0f];
    cell.layer.borderColor = [UIColor colorWithRed: 108/255. green: 166/255. blue: 16/255. alpha:1.0].CGColor;
    cell.layer.CornerRadius = 10;

}

ハイライト コードは、タップされたセルに境界線を付けるだけです。

タップされたセルだけが選択されていることを確認する方法はありますか?

4

1 に答える 1

2

細胞は再利用できるからですよね?それがあなたがこの結果を得ている理由です。

解決策は

  1. 選択したインデックスパスをどこかに保存します。

  2. UICollectionViewCell からセルをサブクラス化し、UICollectionViewCell のprepareForReuseメソッドをオーバーライドします。(didSelectItemAtIndexPath メソッドで) 行ったすべての書式設定をデフォルト値にリセットし、セルを再び使用できるようにする必要があります。prepareForReuseの詳細はこちら

  3. 最初に保存した indexpath を選択したセルに cellForRowItemAtIndexPath で同じ書式設定を再度適用します。それでおしまい!

しかし最後に、ここで直接セルの書式設定を行わないことをお勧めします。UICollectionViewLayoutAttributes を理解し、それを使用してこれらの種類のものをそこで実行してください。

于 2013-01-22T19:10:34.950 に答える