在安装了最新的Mojave macOS之后,我刚刚将我的Xcode升级到了10.2版本。
Xcode要求我将我的Swift从3.0迁移到更高版本,所以我选择更新到Swift 5.0。
在语法更改方面做了一些小改动之后,应用程序就启动并运行了。但是,我发现collectionView didSelectItemAtIndexPath在模拟器或设备中停止工作,这意味着当您点击collectionView中的一个项目时,相应的didSelectItemAtIndexPath方法不再被调用。
我多次检查我的代码更改,我非常确定语法更改与受影响的collectionViews无关。我可以做一些TagGesture技巧来解决,但我想知道这里的问题是什么。
我非常确定集合视图允许用户交互,也允许选择。
这里发生了什么事?
更新:
我的旧代码在迁移后没有任何变化,看起来是这样的:
func collectionView(_ collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: IndexPath) {
...
}我更新了以下每个回答者的建议。但是,还是不能工作。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}(我甚至没有接触xib文件,委托都是正确的。)
发布于 2019-04-05 11:30:33
委托方法可能已重命名。检查您是否正在实现:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)还要仔细检查是否仍将控制器设置为UICollectionView的委托。
发布于 2019-04-24 04:50:34
看看这个问题和答案:https://stackoverflow.com/a/55393950/1943064
本质上,swift 5上有一个关于由超类实现的协议的可选方法实现的bug。如果可选方法在超类中缺失,那么它在子类中也会被标识为缺失。
在通过这个帖子后,我最终到达了那里。这才是我真正的罪魁祸首。还请记住,在构建开发时对文件进行任何更改都可能会随机修复问题(比如添加一些人建议的shouldSelectItemAt。我这样做了,它修复了它,然后我移除了它,它继续工作。然而,我的circleCI构建在100%的情况下仍然是坏的)。
发布于 2021-03-20 08:50:00
您是否在集合视图单元格中放置了按钮或交互式视图?你的触摸是由它处理的,那么didSelect就不会被调用。
button.isUserInteractionEnabled = false奇怪的是,这个问题只发生在我使用较旧的iOS版本(较旧的设备)的情况下,但这个问题已经解决了。
https://stackoverflow.com/questions/55527710
复制相似问题