UICollectionViewDelegate 的奇怪行为

Posted

技术标签:

【中文标题】UICollectionViewDelegate 的奇怪行为【英文标题】:Odd behavior with UICollectionViewDelegate 【发布时间】:2012-12-12 19:29:06 【问题描述】:

我有一个包含 UICollectionView 的 viewController,我在其中实现了两个委托方法 shouldSelectItemAtIndexPath 和 didSelectItemAtIndexPath。 shouldSelect 方法按预期工作,并为每个选定的单元格调用。

didSelect 方法不会在第一个被点击的单元格上被调用,即使被点击了多次。但是,如果您点击第二个单元格,则会调用 didSelect 方法,但 indexPath.item 值是针对先前点击的单元格的。

例如,我点击 collectionView 中的第一个单元格,并调用 shouldSelect,它的 indexPath.item 值 = 0。即使多次点击单元格,也不会调用 DidSelect。

如果我然后点击任何其他单元格,例如,collectionView 中的第 4 个单元格,将调用 shouldSelect 并且它的 indexPath.item 值 = 3。也调用了 didSelect,但它的 indexPath.item 值 = 0(之前选择的单元格)。

如果我继续选择不同的单元格,didSelect 会继续被调用,但 indexPath.item 的值始终是先前选择的项目。如果我多次点击一个单元格,didSelect 将无法调用,直到我点击另一个单元格。

有人吗?我难住了。所有其他数据源和委托方法似乎工作正常。委托和数据源在情节提要中正确连接。

【问题讨论】:

【参考方案1】:

确保您的

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

其实不是

- (void)collectionView:(UICollectionView *)collectionView didDeSelectItemAtIndexPath:(NSIndexPath *)indexPath

(DidDeSelect 与 DidSelect)

我也有同样的问题。

【讨论】:

天哪,这可能只是为我节省了很多时间。我怀疑我曾经见过。

以上是关于UICollectionViewDelegate 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewDelegate 没有触发

在 UICollectionViewDelegate#collectionView:didSelectItemAtIndexPath 中调用 UICollectionView#reloadData:隐

UICollectionView - UICollectionViewDelegate - 如何实现与 canEditRowAtIndexPath 等效?

UICollectionViewDelegate 没有在具有自定义 UICollectionViewCell 和 NSObject 控制器的 UICollectionView 子类上触发

UICollectionReusableView 不显示

第12月第25天 ImagePickerSheetController