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

时间:2015-07-28 07:56:52

标签: ios objective-c uicollectionview uicollectionviewcell uicollectionviewdelegate

当我多次点击UICollectionView的一个单元格 - 双击,三次点击时,它的委托方法didSelectItemAtIndexPath也被多次调用。什么是最简单的预防措施?

我将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

@cihangirs代码:

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

答案 1 :(得分: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

   }
}

这里发生的事情是,无论何时选择一个单元格,它都会自动存储Collection视图的“indexPathsForSelectedItems”,因此下次再次点击所选单元格时,此方法[[collectionView indexPathsForSelectedItems] containsObject:indexPath]将检查该单元格是否已经存在选择与否,如果是,那么它将返回该方法,以便它不会更进一步。