2012-10-12 10 views
6

Ho una vista configurata con due UICollectionViews. Ognuna di queste viste ha una matrice che la supporta con dimensioni diverse. collection1 è supportato da array1 e collection2 è supportato da array2. Il problema è, quale numero mai viene restituito per collection1 da numberOfItemsInSection viene applicato a entrambe le viste di raccolta.Più UICollectionView in un controller

Ad esempio, se array1 è la dimensione 4 e array2 è la dimensione 5, entrambe le raccolte mostreranno 4 elementi. Se array1 è la dimensione 5 e array2 è la dimensione 4, quando eseguo lo scroll collection2 per tutto il modo in cui chiama cellForItemAtIndexPath con un itemIndex di 5 per collection2 e ottengo un NSRangeException.

Come posso fare in modo che ogni collezione utilizzi le proprie dimensioni?

- (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; 
} 

Ho incluso un repository git con un progetto che illustra il problema.

[email protected]: civatrix/MultipleCollectionViews.git

risposta

19

Il problema era che stavo usando lo stesso oggetto di layout per ogni raccolta. In retrospettiva ha senso, ma devi assicurarti di creare layout diversi per ogni collezioneView.

+0

Questo è corretto. Ho avuto lo stesso problema. –

+0

grazie! questo ha risolto anche il mio problema! – ordinaryman09

+0

Up and Thanks !! risolto anche il mio! – z33

1

Quello che hai dovrebbe funzionare. Gli IBOutlet self.colleciton1 e self.collection2 sono? In tal caso, puoi ricontrollare che siano collegati correttamente?

+0

tutto è collegato correttamente, vedo alcuni degli elementi in ciascuna vista collezione. – Civatrix

3

Probabilmente sarebbe più facile da usare ContainerViews e hanno due controller UICollectionView separati per ogni UICollectionView

+1

Buon consiglio. Ciò renderebbe il codice più chiaro e lo renderà più modulare, in modo da poter riutilizzare i singoli controller della vista collezione in diversi punti. –

Problemi correlati