1

UICollectionView のセルの 1 つを複数回 (ダブルタップ、トリプルタップ) タップすると、デリゲート メソッドの didSelectItemAtIndexPath も複数回呼び出されます。それを防ぐための最も巧妙な方法は何ですか?

コメントをいただければ幸いです。

4

2 に答える 2

2

モデル オブジェクトを使用して、選択したプロパティをその中に保持できます (または、この目的のためだけにブール配列を作成できます)。そして、shouldSelectItemAtIndexPath メソッドで確認します。

@cihangirs コード:

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (someModel.isSelected) { 
        return NO; 
    } else { 
        someModel.isSelected = YES; 
        return YES; 
    } 
}
于 2015-07-28T08:28:02.170 に答える
0

これはあなたの目的を達成するための最も安全な方法です:-

 (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]はそのセルが既に選択されているかどうかを確認します。メソッドを返すので、それ以上進めません。

于 2015-07-28T08:09:02.713 に答える