UICollectionView 中的 ScrollToItem 没有发生任何事情 [英] Nothing Occurring with ScrollToItem in UICollectionView

查看:68
本文介绍了UICollectionView 中的 ScrollToItem 没有发生任何事情的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个 ViewController 中有两个集合视图.一个集合视图代表顶部的标签栏,另一个代表屏幕下半部分的页面.我在自定义 UIView(从另一个类加载)中有第二个 UICollectionView(在下半部分).我的目标是当我点击标签栏时,相应地移动底部 collectionView,关于 scrollToIndex.我的问题是,当我单击顶部的选项卡栏并调用自定义 UIView 中的函数时,没有任何反应.我是否需要通过委托/协议共享信息?我做错了什么?

I have two collection views within a ViewController. One Collection view represents the tab bar at the top, the other represents pages on the bottom half of the screen. I have the second UICollectionView (on the bottom half) within a custom UIView (loading from another class). My objective is to have when I click on the tab bar, to move the bottom collectionView accordingly, with regards to the scrollToIndex. My issue is that when I click on the tab bar at the top, and call the function that is in my custom UIView, nothing occurs. Do I need to share information through a delegate/protocol? What am I doing incorrectly?

在我的 MainVC 中,我有:

In my MainVC I have:

/** Setting up the top header **/


 let topBar = UIView()
    /** Setting up the connection to the Bottom Collection View **/
    let mainView = MainViewsHome()

    override func viewWillAppear(_ animated: Bool) {
           self.view.layoutIfNeeded()
        /**Setting up the header that the buttons lay on **/
        topBar.frame = CGRect(x:self.view.frame.width * 0, y:self.view.frame.height * 0, width:self.view.frame.width,height:self.view.frame.height / 6.2)
        topBar.backgroundColor = UIColor.red
        self.view.addSubview(topBar)

        /** Setting up the buttons in the header**/
        setUpHeaderBarButtons()

        /** Setting up the bottom half **/
        mainView.frame = CGRect(x:self.view.frame.width * 0, y:self.view.frame.height / 6.2, width:self.view.frame.width,height:self.view.frame.height / 1.1925)
        mainView.backgroundColor = UIColor.clear
        self.view.addSubview(mainView)
        mainView.delegate = self

    }

&然后为 MainVC 设置 collectionView(条形按钮)

& Then setting up the collectionView for the MainVC (the bar buttons)

func setUpHeaderBarButtons() {
        let flowLayout = UICollectionViewFlowLayout()
        let collectionView = UICollectionView(frame: CGRect(x: topBar.frame.width * 0, y:topBar.frame.height / 1.75, width: topBar.frame.width, height: topBar.frame.height / 3.6), collectionViewLayout: flowLayout)
        collectionView.register(SelectionCVC.self, forCellWithReuseIdentifier: cellId)
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.backgroundColor = UIColor.clear
        topBar.addSubview(collectionView)

    }

&&然后是 MainVC 的 didSelect(条形按钮)

&& Then the didSelect for the MainVC (The bar buttons)

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("selecting cell")
        mainView.moveToPage()
    }

&&然后我的自定义 UIVIew 带有我希望触发 scrollToIndex 的底部集合视图

&& Then my custom UIVIew with the bottom collection view that I wish to trigger a scrollToIndex

class MainViewsHome: UIView, UIGestureRecognizerDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

    var cellId = "Cell"

    var collectionView2 : UICollectionView!

     override init(frame: CGRect) {

        super.init(frame: CGRect(x:0, y:0, width:UIScreen.main.bounds.width, height: UIScreen.main.bounds.height / 1.27))

        /**Creation of the View **/
        let flowLayout2 : UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        flowLayout2.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        flowLayout2.scrollDirection = .horizontal

        let collectionView2 = UICollectionView(frame: CGRect(x:self.frame.width * 0,y:self.frame.height * 0,width:self.frame.width,height: self.frame.height), collectionViewLayout: flowLayout2)
        collectionView2.register(SelectionCVC.self, forCellWithReuseIdentifier: cellId)
        collectionView2.isPagingEnabled = true
        collectionView2.delegate = self
        collectionView2.dataSource = self
        collectionView2.backgroundColor = UIColor.purple

        self.addSubview(collectionView2)

    }


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

    func moveToPage() {
     //   print("we are moving to page")

        let indexPath = IndexPath(item: 2, section: 0) //Change section from 0 to other if you are having multiple sections
        self.collectionView2?.scrollToItem(at: indexPath, at: [], animated: true)

    }
    }

我哪里出错了?

推荐答案

MainViewsHomeinit中代替初始化实例属性collectionView2你正在初始化全新的 collectionView,因此您在 collectionView2 中没有引用.

In the init of MainViewsHome instead of initializing instance property collectionView2 you are initializing completely new collectionView so you are not having reference in collectionView2.

应该是

self.collectionView2 = UICollectionView(frame: CGRect(x:self.frame.width * 0,y:self.frame.height * 0,width:self.frame.width,height: self.frame.height), collectionViewLayout: flowLayout2)

代替

let collectionView2 = UICollectionView(frame: CGRect(x:self.frame.width * 0,y:self.frame.height * 0,width:self.frame.width,height: self.frame.height), collectionViewLayout: flowLayout2)

这篇关于UICollectionView 中的 ScrollToItem 没有发生任何事情的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆