gpt4 book ai didi

ios - 在 UICollectionView 子类中实现 UIScrollViewDelegate

转载 作者:行者123 更新时间:2023-11-28 05:50:12 24 4
gpt4 key购买 nike

我有一个 UICollectionView 子类。

我想为 UIScrollViewDelegate 中的 scrollViewDidScroll 添加默认实现

有没有办法从 UICollectionView 子类访问 scrollView 委托(delegate)方法?

谢谢

最佳答案

您可以添加一个函数来实现您需要的默认代码,例如:

class YourCollectionView: UICollectionView {

override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func updateUIOnScrollViewDidScroll(_ scrollView: UIScrollView) {
//...
}
}

然后当你在 View Controller 中实现委托(delegate)函数时,添加:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
yourCollectionView.updateUIOnScrollViewDidScroll(scrollView)
}

编辑

如果你想像使用外部库一样使用你的集合并且你不想每次都调用更新的函数,你可以实现一个只符合 UICollectionViewDelegate 的自定义类(如果你想要你可以有一个单独的 CustomDataSource实现数据源和委托(delegate)的类),例如:

class YourCollectionViewDelegate: NSObject, UICollectionViewDelegate {
// implement a callback for every function you need to manage in the view controller
var onSelectedItemAt: ((IndexPath) -> Void)?
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath)
onSelectedItemAt?(indexPath)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard let collectionView = scrollView as? YourCollectionViewClass else { fatalError(“your message”) }
// implement your ui update
}

然后在您的 View Controller 中,您只需将委托(delegate)与您的 View Controller 绑定(bind):

class MyViewController: UIViewController {

//...
let customDelegate = YourCollectionViewDelegate()

override func viewDidLoad() {
super.viewDidLoad()
//...
myCollection.delegate = customDelegate
setupBindings()
}

private func setupBindings() {

customDelegate.onSelectedItemAt = { [weak self] indexPath in
//...
}
}

关于ios - 在 UICollectionView 子类中实现 UIScrollViewDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53244392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com