在以编程方式创建的 UICollectionView 中未调用 didDeselectItemAtIndexPath 函数
Posted
技术标签:
【中文标题】在以编程方式创建的 UICollectionView 中未调用 didDeselectItemAtIndexPath 函数【英文标题】:didDeselectItemAtIndexPath function is not being called in programmatically created UICollectionView 【发布时间】:2016-07-22 12:43:46 【问题描述】:我以编程方式创建了一个 UICollectionView。它的单元格还包含以编程方式创建的 UILabel、UIView 和 UIImageView。包含此集合视图的视图也已以编程方式创建。我已经设置了它的数据源并委托给自己。标签、视图和图像视图的 userInteractionEnabled 属性也已设置为 false。集合视图的allowsMultipleSelection 属性也设置为true。
问题是每当我触摸单元格时都会调用 didSelectItemAtIndexPath 函数。但是 didDeselectItemAtIndexPath 函数永远不会被调用。我尝试根据需要将 cell.selected 属性设置为 true/false,但对我的问题没有帮助。
请帮忙!!我花了很多时间搜索它,但没有结果! 感谢您的回复。
【问题讨论】:
你有什么点击手势吗?看这里***.com/questions/16444688/… 感谢 cmets 和答案。我发现了我非常非常大的愚蠢错误。我正在我的 didselect 函数中重新加载我的收藏视图。希望其他人不要在这样的错误上花费数小时。 【参考方案1】:嗯,这两个函数都是根据符合它的对象中的 UICollectionViewDelegate 调用的。我强烈建议您检查以下几点:
-
创建自定义 collectionView 后,不要忘记设置它的 delegate 属性。
在您的委托对象中实现此方法。
-collectionView:didSelectItemAtIndexPath:
或 -collectionView:didDeselectItemAtIndexPath:
并放在那里简单的 NSLog()
输出或断点
别忘了设置 UICollectionView 属性 allowsSelection
到 YES
面对结果
重要说明
1. 如果您调用 UICollectionView 方法,如 -selectItemAtIndexPath:animated:scrollPosition:
或 -deselectItemAtIndexPath:animated:
,此操作不会被触发,也不会收到通知。如您所记,与 UITableViewClass 中的相同
2. UICollectionView 属性allowsMultiplySelection
允许您在集合单元格状态之间切换
3. 在哪里创建元素并不重要。只需正确设置即可。
希望这对您有所帮助。
【讨论】:
以上是关于在以编程方式创建的 UICollectionView 中未调用 didDeselectItemAtIndexPath 函数的主要内容,如果未能解决你的问题,请参考以下文章