2013-06-25 15 views
6

Mi piacerebbe sapere quando un UICollectionViewCell viene visualizzato sullo schermo effettivo. cellForRowAtIndexPath non è sufficiente, in quanto la cella non viene effettivamente visualizzata a questo punto. didEndDisplayingCell non è sufficiente, come viene chiamato quando la cella viene rimossa dalla vista.Come posso determinare quando viene visualizzato UICollectionViewCell?

ha un metodo willDisplayCell che ho trovato utile per cose simili in passato, ma non sembra esistere in UICollectionViewDelegate.

Come determinare quando viene visualizzata la cella sullo schermo?

risposta

0

-[UICollectionView visibleCells] restituisce una NSArray di tutte le cellule visibile sul screnn

+0

Questo potrebbe essere parte della soluzione, ma non c'è un buon posto che possa determinare per chiamare le celle visibili. Potrei farlo durante gli eventi di scorrimento, ma poi devo tenere traccia di quali celle ho già determinato per essere visibile ... c'è molta complessità lì che non credo sarebbe fattibile. – Mike

+1

questo potrebbe segnalare celle che non sono sullo schermo. – Kyle

4

Fare una sottoclasse di UICollectionViewCell. Sovrascrivere sua didMoveToWindow metodo:

- (void)didMoveToWindow { 
    if (self.window != nil) { 
     // I am now in the window's view hierarchy and thus “on screen”. 
    } 
} 

Tecnicamente, la cella potrebbe essere ancora visibile, sia perché è fuori confini visibili della finestra, o perché è coperto da un altro punto di vista. Ma normalmente nessuno di questi sarà il caso.

Si noti inoltre che se una cella viene riutilizzata, potrebbe non essere rimossa e reinserita nella gerarchia della vista. La visualizzazione della raccolta può solo modificare la cornice della cella. (So ​​che lo UITableView esegue questa operazione con celle di visualizzazione tabella a partire da iOS 6.0). In tal caso, non riceverai un messaggio didMoveToWindow quando la cella viene riutilizzata per un altro elemento.

Se si spiega perché si desidera sapere quando viene visualizzata una cella, potremmo essere in grado di darvi una risposta migliore.

+0

Per iniziare, sto solo cercando un evento di analisi in modo da poter confrontare le viste delle celle con azioni diverse. Ma sto anche pensando ad alcune animazioni creative che non voglio avviare finché la cella non è effettivamente visibile all'utente. – Mike

Problemi correlati