如何检测哪个UICollectionView滚动?

How detect which UICollectionView scrolled?

提问人:Tolibov Umid 提问时间:2/5/2021 最后编辑:Anbu.KarthikTolibov Umid 更新时间:2/5/2021 访问量:971

问:

我在一个控制器中有多个collectionView。其中一个在上面,第二个在底部。所以我的问题是如何检测哪个collectionView视图是滚动的?(在 Objective-c 中)为了检测滚动,我使用以下方法: - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 。但是在这种方法中,我无法检测到滚动了哪个collectionView。请帮助您提供建议。

iOS Objective-C UIColictionView UIDscrollView

评论


答:

1赞 Dixit Akabari 2/5/2021 #1

Swift 中,您可以像这样检查:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        
        if scrollView == topCollectionViewName {
            print("Call Top CollectionView")
        }else if scrollView == bottomCollectionViewName{
            print("Call Bottom CollectionView")
        }else{
            print("call any other")
        }
        
}

目标 C 中,您可以像这样检查:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if (scrollView == topCollectionViewName) {
         NSLog(@"Call Top CollectionView");
    }else if (scrollView == bottomCollectionViewName) {
         NSLog(@"Call Bottom CollectionView");
    }else{
            NSLog(@"Call any other");
    }
}

乐于帮助您:)

评论

0赞 Dixit Akabari 2/5/2021
@TolibovUmid 很乐意帮助你。如果这个答案符合您的问题,那么请标记为正确答案,这样它可能对功能中的其他人有所帮助。
1赞 aiwiguna 2/5/2021 #2

UICollectionView 是 UIScrollView 的子类,因此您可以对其进行比较

https://developer.apple.com/documentation/uikit/uicollectionview

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if (scrollView == collectionViewOne) {

    }else if (scrollView == collectionViewTwo) {

    }else{
            //something else
    }
}
1赞 udbhateja 2/5/2021 #3

创建 collectionView 的出口。

@IBOutlet weak var topCollectionView: UICollectionView!
@IBOutlet weak var bottomCollectionView: UICollectionView!

在 scrollView Delegate 方法中:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (scrollView == topCollectionView) {

    }
    else if (scrollView == bottomCollectionView) {

    }
}

这将起作用,因为 UICollectionView 是 UIScrollView 的子类。

0赞 Shivam Parmar 2/5/2021 #4
//        create outlets of both collectionview
        @IBOutlet weak var collectionViewA: UICollectionView!
        @IBOutlet weak var collectionVieB: UICollectionView!
        
//        add delegate method to detect scroll of collectionview
//         for swift
        func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
            
            if collectionView == collectionViewA{
                // collectionviewA was scrolled
            }else{
                // collectionviewB was scrolled
            }
            
        }
        
//        same deleagte for objc
        
        - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
            // compare both collectionview here like upper swift method
        }