2017-02-16 4 views
0

私はスクロールビューで複数のコレクションビューを持っています。データが正しく表示されないという問題があります(最初のページの項目数は前回と同じです)。私は問題がコレクションビューのデータソースオブジェクトにあると思います。私はそれを読んだ:Swift:1つのビューコントローラで複数のコレクションビューの複数のデータソースを初期化する方法

collectionView.dataSource = MyDataSource() は間違っています。データソースは弱い参照であるため、作成後に元の状態になるためには強く参照する必要があります。 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

答えて

0

あなたのビューコントローラvar dataSources: CVDataSource = []に配列を追加して、上記ループ内のデータ・ソースdataSources.append(ds)を追加します。あなたのVCは、各データソースへの強い参照を持つ配列への強いリファレンスを持っています。

0

問題はデータソースではなく、私が使用したのと同じレイアウトオブジェクトで発生しています。この質問は、UICollectionView numberOfItemsInSection being called twiceの複製とみなすことができます(そこに答えが見つかりました)。

関連する問題