2013-04-20 16 views
8

Mam UICollection, w którym będzie liczba elementów Studentów, a każdy element mający przełącznik wewnątrz służy do rejestrowania obecności. Przechodzę przez wszystkie widoczne komórki w ten sposób.Zapętlając wszystkie komórki w widoku UICollectionview

for(attendancecollectionViewCell* cells in [[self collectionView] visibleCells]){ 

    NSLog(@"The switch value : %c",cells.attendanceSwitchLabel.isOn); 

} 

Ale, chciałem przejrzeć wszystkie komórki do wzięcia udziału, a nie tylko widoczne komórki.

+0

Jeśli nie trzeba manipulować komórkami, należy wykonać iterację ze źródła danych, w którym skonfigurowano komórki. –

Odpowiedz

13

Nie można przechodzić przez niewidoczne komórki, ponieważ te komórki nie istnieją. UICollectionView, podobnie jak UITableView, ponownie wykorzystuje komórki, gdy tylko znajdą się poza ekranem. Oznacza to, że przewijanie w dół zajmuje komórkę, która została przewinięta i używa jej do "nowej" komórki, która ma zostać przewinięta do widoku.

Jeśli chcesz zachować stan dla wpisu w swojej kolekcji, musisz go przechowywać oddzielnie od samej komórki. Na przykład NSArray of structs (lub niestandardowe NSObjects) mapujące do wartości indexPath.row.

Ważniejsze dla Ciebie pytanie brzmi: co próbujesz osiągnąć w swojej pętli for?

Daj mi znać, jeśli potrzebujesz więcej informacji lub przykładowy kod.

+0

Myślę, że mam ważny przykład chęci dostępu do niewidocznych komórek - moje pytanie na ten temat jest tutaj, jeśli masz sekundę http://stackoverflow.com/questions/33259244/how-to-redraw-non-visible-uicollectionviewcells -fter-rotacja-ready-for-when-r – Greg

+3

"ponieważ te komórki nie istnieją": to nie jest prawda. Komórki istnieją, ponieważ są ponownie wykorzystywane. Istnieją i czekają na ponowne wykorzystanie. Ale mam reprodukcyjny dowód, w którym komórki NIE są w komórkach widzialnych i są ponownie używane (np. Bez połączenia z DequeueReusableCell). – Softlion

+4

@Softlion Miałem ten sam problem. Okazuje się, że jest to rzecz na iOS10, w której komórki pozostają czasami nawet po wyjściu poza ekran. Możesz wyłączyć to zachowanie, wykonując '' 'collectionView.prefetchingEnabled = NO''' – alemangui

Powiązane problemy