UICollectionView のセルの 1 つを複数回 (ダブルタップ、トリプルタップ) タップすると、デリゲート メソッドの didSelectItemAtIndexPath も複数回呼び出されます。それを防ぐための最も巧妙な方法は何ですか?
コメントをいただければ幸いです。
UICollectionView のセルの 1 つを複数回 (ダブルタップ、トリプルタップ) タップすると、デリゲート メソッドの didSelectItemAtIndexPath も複数回呼び出されます。それを防ぐための最も巧妙な方法は何ですか?
コメントをいただければ幸いです。
モデル オブジェクトを使用して、選択したプロパティをその中に保持できます (または、この目的のためだけにブール配列を作成できます)。そして、shouldSelectItemAtIndexPath メソッドで確認します。
@cihangirs コード:
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (someModel.isSelected) { 
        return NO; 
    } else { 
        someModel.isSelected = YES; 
        return YES; 
    } 
}
これはあなたの目的を達成するための最も安全な方法です:-
 (void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
  if([[collectionView indexPathsForSelectedItems] containsObject:indexPath]) // checking whether cell is already selected or not
    {
      return;
    }
 else
   {
 // do whatever you want to do on selection of cell
   }
}
ここで起こっていることは、セルを選択するたびにコレクションビューの「indexPathsForSelectedItems」が自動的に保存されるため、次に選択したセルをもう一度タップすると、このメソッド[[collectionView indexPathsForSelectedItems] containsObject:indexPath]はそのセルが既に選択されているかどうかを確認します。メソッドを返すので、それ以上進めません。