【问题标题】: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 和 Stackoverflow 上搜索了解决方案,但我认为没有针对此问题的解决方案。

我们将不胜感激。

【问题讨论】:

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

标签: ios swift uicollectionview uiscrollview


【解决方案1】:

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

  1. 首先在 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 可能会导致您的应用崩溃
猜你喜欢
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多