在以编程方式创建的 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 属性 allowsSelectionYES 面对结果

重要说明 1. 如果您调用 UICollectionView 方法,如 -selectItemAtIndexPath:animated:scrollPosition:-deselectItemAtIndexPath:animated:,此操作不会被触发,也不会收到通知。如您所记,与 UITableViewClass 中的相同 2. UICollectionView 属性allowsMultiplySelection 允许您在集合单元格状态之间切换 3. 在哪里创建元素并不重要。只需正确设置即可。

希望这对您有所帮助。

【讨论】:

以上是关于在以编程方式创建的 UICollectionView 中未调用 didDeselectItemAtIndexPath 函数的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 委托在以编程方式创建时从不调用

故事板集合视图拒绝在以编程方式创建的按钮前面

允许在以模式方式显示的以编程方式创建的视图内自动旋转

如何在以编程方式创建实体时设置 NSManagedObjectModel 的配置。

在以编程方式创建的 UIView 层次结构之上添加子视图

Imageview 未显示在以编程方式创建的 collectionview 中