如何防止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中为不可见单元格设置动画时如何防止延迟