Swift:如何在一个视图控制器中为多个集合视图初始化多个数据源

时间:2017-02-16 04:55:46

标签: ios swift uicollectionview

我在滚动视图中有多个集合视图。我有一个数据未正确显示的问题(第一页上的项目数与最后一页上的项目数相同)。我想问题是在集合视图的数据源对象中。我读到了:

collectionView.dataSource = MyDataSource() 是错误的,因为dataSource是一个弱引用,因此它需要通过一些强引用存储,以便在创建它之后保持活动状态。在ViewController中添加私有属性以保留强引用,初始化然后分配它修复了问题

但我不明白我该怎样才能为多个数据集做到这一点?

  pages = musicItems.count/6+1 //numberOfItems%itemsOnTheScreen
    self.scrollView.delegate = self;
    self.scrollView.isScrollEnabled = true
    self.scrollView.isPagingEnabled = true
    bounds = self.scrollView.bounds

    let flowLayout = CVLayout()
    for i in 0...pages-1 {
        let x = bounds.width*CGFloat(i)
        let y = bounds.origin.y
        let width = bounds.width
        let height = bounds.height
        let collectionViewElement = UICollectionView(frame: CGRect(x:x,y:y,width:width,height:height), collectionViewLayout: flowLayout)
        if let page = i as? Int {
            collectionViewElement.register(ImageCollectionViewCell.self, forCellWithReuseIdentifier: "cell\(page)")}

        var ds: CVDataSource = CVDataSource()
        ds.page = i
        ds.itemsCount = itemsOnThePage(currentPage: i)
        collectionViewElement.delegate = ds//self
        collectionViewElement.dataSource = ds//self
        print("set value \(i)")

        collectionViewElement.isScrollEnabled = false
        collectionViewElement.backgroundColor = UIColor.white
        self.scrollView.addSubview(collectionViewElement)

    }

2 个答案:

答案 0 :(得分:0)

将数组添加到视图控制器var dataSources: CVDataSource = [],然后在上面的循环中添加数据源dataSources.append(ds)。您的VC将对该阵列有一个强有力的参考,该阵列对每个数据源都有很强的参考。

答案 1 :(得分:0)

问题不是由数据源引起的,而是由我使用的相同布局对象引起的。这个问题可以视为重复:UICollectionView numberOfItemsInSection being called twice(在那里找到答案)。