2017-08-29 19 views
1

2つの配列があります.1つはフォトポスト配列で、もう1つはvideoPost配列です。今度は、これらの配列を同時に1つのコレクションビューに表示することは可能ですか?私は以下の方法を使用しようとしましたがうまくいきません。私はそれを正しくやっているのかどうかはわかりません。大いに助けていただければ幸いです。事前のおかげでコレクションビューに2つの配列を追加します

var photoPosts = [photoPost]() 
var videoPosts = [videoPost]() 

func retrieveData(){ 
let ref = Database.database().reference().child("videoPost").child(uid) 
     ref.observe(.childAdded, with: { (snapshot) in 
      let dictionary = videoPost(snapshot: snapshot) 
      self.videoPosts.append(dictionary) 
}) 
let ref = Database.database().reference().child(“photoPost").child(uid) 
     ref.observe(.childAdded, with: { (snapshot) in 
      let dictionary = photoPost(snapshot: snapshot) 
      self. photoPosts.append(dictionary) 
}) 
self.newsfeedCollectionView?.reloadData() 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
return videoPosts.count + photoPosts.count 
} 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {   
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! newsfeedCollectionViewCell 
     cell. photoPost = photoPosts[indexPath.item] 
     cell.videoPost = videoPosts[indexPath.item] // fatal error:index out of range 
     return cell 
    } 
+0

を試してみてください単一の配列を持っており、それに写真やビデオを追加することです。今は2つの配列で、numberOfItemsInSectionの配列数とcellForItemの配列数の両方を返しています。indexPath.itemで値を取得しようとしています。 – Gyanendra

+0

私は両方のアレイを1つのアレイに入れてみましたが、正しく動作しませんでした。たとえば、カウントはphotoPostとvideoPostのオブジェクトの合計ですが、photoPosts @Gyanendraのオブジェクトのみを表示します –

答えて

1

は、ソリューションのようになり、この

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {   
      let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! newsfeedCollectionViewCell 
     if indexPath.item < photoPosts.count { 
      cell. photoPost = photoPosts[indexPath.item] 
      } else { 
      cell.videoPost = videoPosts[indexPath.item-photoPosts.count] 
      } 
      return cell 
      } 
+0

これは機能します。ありがとうございました –

+0

それは完璧に動作しますが、私がビューコントローラから出て戻ってくると、リロードしたり、同じものを追加したりしません。なぜこれが多分なんての提案?受け入れてくれてありがとう。 –

+0

あなたの関数をチェックするretrieveData()はあなたが正しい場所にviewDidLoadまたはViewWillApearを置いていることを確認しています。 – SuryaKantSharma

関連する問題