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