如何防止多次调用 collectionView:didSelectItemAtIndexPath 委托方法

How to prevent collectionView:didSelectItemAtIndexPath delegate method called more than once

当我多次点击 UICollectionView 的一个单元格时——双击、三次点击——它的委托方法 didSelectItemAtIndexPath 也被调用不止一次。什么是最巧妙的预防方法?

如有任何意见,我将不胜感激。

这是最安全的方法objective:-

 (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

   }
}

这里发生的事情是,每当你 select 一个单元格时,它会自动存储 Collection 视图的 "indexPathsForSelectedItems",所以下次你点击 select再次编辑单元格此方法 [[collectionView indexPathsForSelectedItems] containsObject:indexPath] 将检查该单元格是否已被 select 编辑,如果是,则它将 return 该方法,以便它不会进行任何进一步的操作。

您可以使用您的模型对象在其中保存选定的 属性(或者您可以为此创建一个布尔数组)。并在 shouldSelectItemAtIndexPath 方法中检查它。

@cihangirs代码:

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (someModel.isSelected) { 
        return NO; 
    } else { 
        someModel.isSelected = YES; 
        return YES; 
    } 
}