2013-04-20 19 views
8

Ho UICollection in cui ci sarà il numero di articoli Studenti e ogni voce che ha al suo interno interruttore per la registrazione di presenze. Sono in loop attraverso tutte le celle visibili come questa.looping attraverso tutte le celle in UICollectionview

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

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

} 

Ma, volevo passare in rassegna tutte le celle per la presenza, non solo le celle visibili.

+0

A meno che non sia necessario manipolare le celle, è necessario scorrere l'origine dati da cui sono state configurate le celle. –

risposta

13

Non è possibile eseguire il ciclo di celle non visibili perché tali celle non esistono. UICollectionView, come UITableView, riutilizza le celle non appena sono fuori schermo. Ad esempio, se si scorre verso il basso, prende una cella che è stata scrollata e la usa per una "nuova" cella che sta per essere scorsa in vista.

Se si desidera mantenere lo stato per una voce nella propria raccolta, sarà necessario memorizzarla separatamente dalla cella stessa. Ad esempio, un NSArray di struct (o NSObjects personalizzati) che si associano al valore indexPath.row.

Una domanda più importante per te in particolare sarebbe: cosa stai cercando di ottenere nel tuo ciclo?

Fatemi sapere se avete bisogno di ulteriori informazioni o codice di esempio.

+0

Penso di avere un valido esempio di voler accedere alle celle non visibili - la mia domanda su questo è qui se avessi un secondo http://stackoverflow.com/questions/33259244/how-to-redraw-non-visible-uicollectionviewcells -after-rotation-ready-for-when-r – Greg

+3

"perché quelle celle non esistono": questo non è vero. Le celle esistono mentre vengono riutilizzate. Esistono e stanno aspettando di essere riutilizzati. Ma ho una prova riproducibile in cui le cellule NON sono in visibleCell e sono riutilizzate (es: senza una chiamata a DequeueReusableCell). – Softlion

+4

@Softlion Ho avuto lo stesso problema. Abbiamo scoperto che si tratta di una cosa iOS10, in cui le celle restano a volte anche dopo essere state fuori schermo. Puoi disabilitare questo comportamento facendo '' 'collectionView.prefetchingEnabled = NO''' – alemangui

Problemi correlati