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#collectionView:didSelectItemAtIndexPath 中调用 UICollectionView#reloadData:隐
UICollectionView - UICollectionViewDelegate - 如何实现与 canEditRowAtIndexPath 等效?
UICollectionViewDelegate 没有在具有自定义 UICollectionViewCell 和 NSObject 控制器的 UICollectionView 子类上触发