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

问题描述:

我在滚动视图中有多个集合视图。我有一个数据显示不正确的问题(第一页上的项目数量与最后一个项目的数量相同)。我想这个问题是在收集视图的数据源对象。我读到:Swift:如何在一个视图控制器中为多个集合视图初始化多个数据源

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) 

    } 
+0

埃琳娜请上传任何屏幕截图,以更好地了解您的要求。 – iDeveloper

添加的阵列到视图控制器var dataSources: CVDataSource = [],然后在循环内添加上述数据源dataSources.append(ds)。你的VC将有一个强大的参考数组,这将有一个强大的参考每个数据源。

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