方法没有覆盖超类中的任何函数(覆盖 func collectionView)[重复]

Posted

技术标签:

【中文标题】方法没有覆盖超类中的任何函数(覆盖 func collectionView)[重复]【英文标题】:method isn't overriding any function from superclass (override func collectionView) [duplicate] 【发布时间】:2017-03-13 04:36:22 【问题描述】:

尝试在集合视图上注册一个点击以使用以下方法关闭键盘

   override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
    inputTextField.endEditing(true)


但是我收到一个编译错误,说该方法没有覆盖它的超类中的任何方法。

该类的类型为 UICollectionViewController 和 UICollectionViewDelegateFlowLayout

同样使用 swift 3。

谢谢。

【问题讨论】:

【参考方案1】:

这不是 Swift 3 函数——你想要它的更新版本——你可以知道,因为它的第一个参数前面没有 _。你真正想要的是:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

  

改用那个,一切都会正常。

【讨论】:

这个问题我不容易发现,哈哈。 @chengsam 从 Swift 2 -> 3 转换大型项目时,我真的非常非常难受 我学习 swift 已经有一段时间了,刚刚开始更新到 swift 3。顺便说一句,解决方案效果很好。谢谢。 嗨@sschale,你能解释一下这个下划线是什么吗?我对 Swift 完全陌生,很长时间没有做过任何 UI 开发。这个结构让我很困惑;这些回调是在 CollectionView 类上,还是我们覆盖了基类上的方法重载? 对于任何在这里晃荡的人,我用 1 个 Google 搜索回答了我自己的问题(是的,我知道):***.com/questions/39627106/…【参考方案2】:

只需删除 override 关键字即可。

【讨论】:

移除覆盖会移除错误,但不会在集合视图上注册点击。 你的班级是否实现了UICollectionViewDelegateFlowLayout?并确保您的 collectionView 已设置委托。 我使用 sizeForItemAtIndexPath 非常好,所以我知道 UICollectionViewDelegateFlowLayout 已实现并且委托已设置。 didSelectItemAtIndexPath 有新语法吗? sschale 的答案应该是您的解决方案。

以上是关于方法没有覆盖超类中的任何函数(覆盖 func collectionView)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

覆盖 touchesBegan:错误 - 方法不会覆盖超类中的任何方法

supportedInterfaceOrientations 方法不会覆盖其超类中的任何方法

“方法不会覆盖其超类中的任何方法”Swift 3 [重复]

超类中的私有final可以被覆盖吗?

方法与超类中的方法冲突 - 覆盖给出错误 [重复]

父类中的方法被覆盖以及子类调用父类覆盖的方法