2017-12-13 3 views
0

私のプロジェクトアプリケーションにtableViewsとcollectionViewsの両方があります。テーブルとコレクションの両方で、最初にタップしたときに行/セルを選択し、2度目にタップすると選択解除する必要があります。2番目のタップでUICollectionViewセルの選択を解除します。

tableViewを使用して、わかりやすく簡単な解決策hereが見つかりました。これはうまく機能します。

CollectionViewは、まったく別のタイプの獣でした。 tableViewとは異なり、willSelectItemAtデリゲートメソッドはありません。したがって、2番目のタップが登録される前にアイテムが選択された状態にあるかどうかを確認する方法はありません。 shouldDeselectItemAtdidDeselectItemAtを実装すると、結果が得られません。タップしたときに既に選択されているセルに対してこれらのメソッドが呼び出されることはありません。

もっともらしいsolutionは、各collectionViewセルに対してUIButtonを作成することを示唆していますが、それは本当に複雑なはずですか?

答えて

1

"shouldSelectItem" UIColllectionViewDelegateメソッドを使用してみてください。

func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { 
    let item = collectionView.cellForItem(at: indexPath) 
    if item?.isSelected ?? false { 
     collectionView.deselectItem(at: indexPath, animated: true) 
    } else { 
     collectionView.selectItem(at: indexPath, animated: true, scrollPosition: []) 
    } 

    return false 
} 
+0

ありがとう、素晴らしいソリューション! 'else'ステートメントについては、' didItelectItemAt() 'メソッドでいくつかのロジックを実行する必要があるため、' selectItem() 'の代わりに' return true'を使用しました。 –

関連する問題