【问题标题】:Override a UICollectionView function in Swift在 Swift 中覆盖 UICollectionView 函数
【发布时间】:2021-07-11 06:11:55
【问题描述】:

我的应用中有一个振动功能,我想在我的应用中每个 collectionView 的每个“didHighlight”函数中触发它。

func collectionView(_ collectionView: UICollectionView,  didHighlightItemAt indexPath: IndexPath) {
     softVibrate()
}

问题是如何在一个地方覆盖这个 didHighlight 委托函数,这样就不需要手动为每个 collectionViews 单独调用它?

我搜索了这个但找不到任何答案。

【问题讨论】:

  • 您是否尝试为跨不同类的多个 collectionView 执行此操作?如果是这种情况,我建议不要这样做。如果你想在将来为一个 collectionView 删除它,它会产生复杂性。
  • @MatthewMitchell 是的,我想在所有类的每个 collectionView 中使用它。顺便感谢您的警告。

标签: swift delegates overriding


【解决方案1】:

您可以创建一个类,例如符合 NSObject 和 UICollectionViewDelegate 的 VibratedCollectionViewDelegate:

class VibratedCollectionViewDelegate: NSObject, UICollectionViewDelegate {}

并在您的新类中覆盖此方法。 然后应该在 yourViewContoller 中设置:

class MyViewController: UIViewController {

  let collectionView = UICollectionView()
  let vibratedCollectionViewDelegate = VibratedCollectionViewDelegate()

  override func viewDidLoad() {
        super.viewDidLoad()
        
        collectionView.delegate = vibratedCollectionViewDelegate
    }

}

如果您需要额外覆盖 UICollectionViewDelegate 方法,您可以创建一个继承 VibratedCollectionViewDelegate 的新类。

【讨论】:

  • 感谢您的回复。我现在尝试了它并且遇到了问题,当我将 VibratedCollectionViewDelegate 类符合 UICollectionViewDelegate 时,我必须处理来自 UICollectionViewDelegate 的一堆不需要的委托函数。
  • 最后我在这一行遇到了崩溃:collectionView.delegate = vibratedCollectionViewDelegate as! UICollectionViewDelegate
  • 哦,对不起。我忘了继承 NSObject。因此,您应该像 class VibratedCollectionViewDelegate: NSObject, UICollectionViewDelegate {. } 一样声明您的 VibratedCollectionViewDelegate。我在上面编辑了我的代码。第二件事:你不应该使用 force unwrap as!
  • 再次感谢,我也试过了,这也没有用,似乎collectionView委托停止工作了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2018-11-18
相关资源
最近更新 更多