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

Posted

技术标签:

【中文标题】如何防止collectionView:didSelectItemAtIndexPath委托方法被调用多次【英文标题】:How to prevent collectionView:didSelectItemAtIndexPath delegate method called more than once 【发布时间】:2015-07-28 07:56:51 【问题描述】:

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

我会很感激任何 cmets。

【问题讨论】:

【参考方案1】:

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

@cihangirs 代码:

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

【讨论】:

【参考方案2】:

这是实现目标最安全的方法:-

 (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] 将检查该单元格是否已被选中或不是,如果是,那么它将返回该方法,使其不再进一步。

【讨论】:

以上是关于如何防止collectionView:didSelectItemAtIndexPath委托方法被调用多次的主要内容,如果未能解决你的问题,请参考以下文章

ios - 如何播放 MPMediaItemCollection?

尝试在collectionview中为不可见单元格设置动画时如何防止延迟

如何将数据从集合视图传递到表视图类?

collectionView 防止cell复用的方法

**防止在水平滚动视图内拖动两个 CollectionView **

为 collectionview 链接 performBatchUpdates