如何检查哪个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中滚动的主要内容,如果未能解决你的问题,请参考以下文章