2012-10-12 16 views
6

Mam widok skonfigurowany z dwoma UICollectionViews. Każdy z tych widoków ma tablicę, na której są one w różnych rozmiarach. collection1 jest wspierane przez tablicę1, a collection2 jest wspierane przez tablicę2. Problem polega na tym, że zawsze zwracana liczba dla kolekcji 1 z numberOfItemsInSection jest stosowana do obu widoków kolekcji.Wiele UICollectionView w jednym kontrolerze

Na przykład, jeśli tablica 1 ma rozmiar 4, a tablica 2 ma rozmiar 5, obie kolekcje pokażą 4 elementy. Jeśli tablica1 ma rozmiar 5, a tablica 2 ma rozmiar 4, to po przewinięciu kolekcji 2 tak, jak wywołuje funkcję cellForItemAtIndexPath z itemIndex z 5 dla kolekcji2, otrzymuję wyjątek NSRangeException.

W jaki sposób mogę wykonać każdą kolekcję? Użyj swojego własnego rozmiaru?

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

Dołączyłem repozytorium git z projektem ilustrującym problem.

[email protected]: civatrix/MultipleCollectionViews.git

Odpowiedz

19

Problem polegał na tym, że korzystałem z tego samego obiektu układu dla każdej kolekcji. Z perspektywy czasu ma to sens, ale musisz upewnić się, że tworzysz różne układy dla każdego collectionView.

+0

To jest poprawne. Miałem ten sam problem. –

+0

dzięki! to rozwiązało mój problem! – ordinaryman09

+0

Up and Thanks !! rozwiązałem też moje! – z33

1

Co masz powinno działać. Czy to self.colleciton1 i self.collection2 IBOutlets? Jeśli tak, czy możesz dwukrotnie sprawdzić, czy są one poprawnie podłączone?

+0

Wszystko jest podłączone prawidłowo, widzę niektórych elementów w każdym widoku kolekcji. – Civatrix

3

Prawdopodobnie byłoby łatwiejsze w użyciu ContainerViews i posiada dwa oddzielne kontrolery UICollectionView dla każdego UICollectionView

+1

Dobra sugestia. Dzięki temu kod stanie się bardziej przejrzysty i uczyni go bardziej modułowym, dzięki czemu można będzie ponownie używać poszczególnych kontrolerów widoku kolekcji w różnych miejscach. –

Powiązane problemy