2014-11-18 8 views
13

Ho una vista di raccolta con additionalViewView per ogni sezione. In ogni supplementoView ho alcuni pulsanti. In dataSource metodo collectionView: viewForSupplementaryElementOfKind: atIndexPath: Sto impostando i tag buttons con indexPath.section. Ho fatto alcuni metodi delegate quando si preme un pulsante e si invia la sezione (button.tag) come parametro.UICollectionView: esiste un modo per ricaricare solo le viste supplementari?

Tutto funziona bene, ma qui viene il problema:

  • quando inserisco o eliminare una sezione deve aggiornare i pulsanti tag, ma non voglio ricaricare tutti gli elementi di ogni sezione.

ho provato:

  • per ottenere i supplementaryViews con il metodo dataSource CollectionView: viewForSupplementaryElementOfKind: atIndexPath: e chiamare layoutIfNeeded metodo per ogni supplementaryView, in questo modo il Le immagini supplementari si stanno ricaricando, ma questo approccio moltiplica le mie viste supplementari.
  • un facile per in collectionView.subviews e ottenere solo l'supplementaryView e chiama layoutIfNeeded metodo, ma non ricarica, solo il layout sta caricando.
  • reloadSections: metodo, ma questo reload tutti gli elementi dalla sezione

Ohh .. e io uso NSFetchedResultsController (delegato) per l'inserimento e l'eliminazione di sezioni.

Qualcuno può aiutarmi con questo? C'è un modo per ricaricare solo il supplemento View? C'è un altro approccio per questo scenario?

Grazie!

+0

ho risolto.Uso personalizzato * UICollectionViewLayoutAttributes * per il mio * additionalaryView * e uno degli attributi personalizzati è un * NSInteger * che mantiene la sezione e nel metodo delegato NSFetchedResultsController * controllerDidChangeContent: * dopo l'inserimento o l'eliminazione delle sezioni, invalido il layout della vista dell'insieme. Non sono sicuro se sia una buona pratica, ma funziona e ora è importante in questo momento :) – Irina

risposta

10

Per ricaricare viste supplementari è possibile utilizzare -invalidateLayoutWithContext:.

Vedere documentazione per UICollectionViewLayoutInvalidationContext e metodo -invalidateSupplementaryElementsOfKind:atIndexPaths: (disponibile da iOS 8).

+0

['invalidateSupplementaryElementsOfKind'] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/ UICollectionViewLayoutInvalidationContext_class/index.html # // apple_ref/occ/instm/UICollectionViewLayoutInvalidationContext/invalidateSupplementaryElementsOfKind: atIndexPaths :) è disponibile su iOS 8 e higer. – testing

+0

Buona presa. Ho aggiornato la risposta. –

+0

Era una domanda vecchia, ma utile per situazioni future simili. Grazie! – Irina