2012-10-12 5 views
6

2つのUICollectionViewでビューを設定しました。これらのビューのそれぞれには、サイズの異なる配列が配列されています。 collection1はarray1によってサポートされ、collection2はarray2によってサポートされます。問題は、numberOfItemsInSectionからcollection1に返される数値が両方のコレクションビューに適用されていることです。1つのコントローラに複数のUICollectionViewを表示

たとえば、array1のサイズが4で、array2のサイズが5の場合、両方のコレクションに4つの要素が表示されます。 array1がサイズ5でarray2がサイズ4の場合、collection2をスクロールすると、collection2のitemIndexが5のcellForItemAtIndexPathが呼び出され、NSRangeExceptionが返されます。

各コレクションビューに独自のサイズを使用するにはどうすればよいですか?

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section; 
{ 
    if(view == self.colleciton1){ 
     return self.array1.count; 
    } else if (view == self.collection2){ 
     return self.array2.count; 
    } 

    return 0; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    if(cv == self.collection1){ 
     CharacterCell *cell = [cv dequeueReusableCellWithReuseIdentifier:FIRST_CELL_IDENTIFIER forIndexPath:indexPath]; 
     cell.label.text = self.array1[indexPath.item]; 
     return cell; 
    } else if (cv == self.collection2){ 
     EpisodeCell *cell = [cv dequeueReusableCellWithReuseIdentifier:SECOND_CELL_IDENTIFIER forIndexPath:indexPath]; 
     cell.label.text = self.array2[indexPath.item]; 
     return cell; 
    } 

    return nil; 
} 

問題を説明するプロジェクトにgit repoを追加しました。

[email protected]:civatrix/MultipleCollectionViews.git

答えて

19

問題は、各コレクションに同じレイアウトオブジェクトを使用していたことでした。見返りには意味がありますが、コレクションビューごとに異なるレイアウトを作成する必要があります。

+0

これは正しいです。私も同じ問題がありました。 –

+0

ありがとう!これも私の問題を解決しました! – ordinaryman09

+0

アップしてありがとう!私も解決しました! – z33

1

あなたが動作するはずですが何をしています。 self.colleciton1とself.collection2 IBOutletsはありますか?もしそうなら、彼らが正しく接続されていることを再度確認できますか?

+0

すべてのための2つの別々のUICollectionViewコントローラをContainerViewsを使用して持つことが容易になるだろう、私は、各コレクションビュー内の要素のいくつかを参照してください。 – Civatrix

3

おそらくそれは正しくフックアップされている各UICollectionView

+1

良い提案。これは、コードをより明確にし、モジュール化して、コレクションビューコントローラを別の場所で再利用できるようにするものです。 –

関連する問題