如何检查哪个collectionview是不是在swift中滚动

Posted

技术标签:

【中文标题】如何检查哪个collectionview是不是在swift中滚动【英文标题】:how to check if which collectionview is scrolled in swift如何检查哪个collectionview是否在swift中滚动 【发布时间】:2019-09-18 14:59:35 【问题描述】:

我正在开发在一个 ViewController 中包含 3 个 UICollectionViews 的应用程序。 我可以通过这段代码知道 UICollectionView 是否滚动

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) 
    let isScrolling: Bool = colView.isDragging || colView.isDecelerating

具体来说,我想知道哪个 UICollectionView 在 scrollViewDidEndDragging 中滚动了。

但问题是我不知道之前是否滚动了哪个collectionview。 就像我想知道 colview2 是否正在滚动一样。 有没有人知道这个解决方案?我在 Google 和 *** 上搜索了解决方案,但我认为没有针对此问题的解决方案。

我们将不胜感激。

【问题讨论】:

你可以试试 scrollview 委托方法 willScroll/didScroll 抱歉,我认为这不会有帮助 @MobileStar 检查是否 scrollView == yourCollectionView ,执行操作。在 scrollViewDidEndDragging 中添加这个检查,它可能会给你想要的结果,因为集合视图是 uiscrollview 的子类。 【参考方案1】:

您可以通过将标签设置为 CollectionView 和滚动视图委托方法 scrollViewDidEndDecelerating 这是代码:

    首先在 ViewDidLoad 方法中在 CollectionView 顶部设置标签:
firstCollectionView.tag = 1 
secondCollectionView.tag = 2 
thirdCollectionView.tag = 3

2.在viewDidload 的上方创建三个 Property Observer 变量:

   var whichCollectionViewScrolled = "" 
        willSet
            print(newValue)
        
    

    var isFirstCollectionViewScrolled = false 
        willSet
            print("First CollectionView Scrolled : \(newValue)")
        
    
    var isSecondCollectionViewScrolled = false 
        willSet
            print("Second CollectionView Scrolled : \(newValue)")
        
    
    var isthirdCollectionViewScrolled = false 
        willSet
            print("Third CollectionView Scrolled : \(newValue)")
        
    

1.lastly 在您的 scrollViewDelegate 方法中转换您的滚动视图实例并检查标签值,如下所示:

extension ViewController: UIScrollViewDelegate 
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 

        if let collectionView = scrollView as? UICollectionView 
            switch collectionView.tag 
            case 1:
                whichCollectionViewScrolled = "First"
                isFirstCollectionViewScrolled = true
                isSecondCollectionViewScrolled = false
                isthirdCollectionViewScrolled = false
            case 2:
                whichCollectionViewScrolled = "second"
                isFirstCollectionViewScrolled = false
                isSecondCollectionViewScrolled = true
                isthirdCollectionViewScrolled = false
            case 3:
                whichCollectionViewScrolled = "Third"
                isFirstCollectionViewScrolled = false
                isSecondCollectionViewScrolled = false
                isthirdCollectionViewScrolled = true
            default:
                whichCollectionViewScrolled = "unknown"
            

         else
            print("cant cast")
        
    

希望对你有帮助。

【讨论】:

抱歉,您能说得更具体点吗? 你想知道它在哪里滚动? 更新了我的答案对这种情况有帮助吗? 问题在于isDragging 和isDecelerating 值,有时会出现错误,比如我滚动col2view,然后滚动col1view,然后co2view 的isDragging 值为true,应该为false跨度> 我已经更新了我的答案希望你能得到你想要的结果【参考方案2】:

滚动视图是 UICollectionView 的超类。只需检查您存储的滚动视图和集合视图是否是同一个实例。

if collectionView === scrollView 

像这样。

【讨论】:

您的解决方案运行良好,很抱歉没有将您的答案标记为已接受的答案,我只能将一个答案标记为已接受。 没问题。我很高兴它对你有所帮助。 在初始化期间比较scrollViewDidScroll 内的实例时要小心collectionView 可能会导致您的应用崩溃

以上是关于如何检查哪个collectionview是不是在swift中滚动的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何知道使用自定义委托按下哪个按钮CollectionView

如何检查音乐是不是正在从哪个音乐应用程序播放?

如何检查特定文件是不是存在以及使用哪个退出代码?

如何检查刷新控件是不是在其目标操作方法中刷新

如何解决此 CollectionView 崩溃?

AIX系统如何检查一个对象是不是被mount上了?用啥user在哪个路径下用啥命令确认?谢谢。