2014-11-18 15 views
13

Mam widok na kolekcję z uzupełnieniemView dla każdej sekcji. W każdym uzupełniającym widoku Mam kilka przycisków. W metodzie dataSource: collectionView: viewForSupplementaryElementOfKind: atIndexPath: Ustawiam znaczniki przycisków za pomocą indexPath.section. Po naciśnięciu przycisku wykonałem kilka metod delegowania i wysłałem sekcję (button.tag) jako parametr.UICollectionView: Czy istnieje sposób na przeładowanie tylko widoków dodatkowych?

Wszystko działa poprawnie, ale tu pojawia się problem:

  • kiedy wstawić lub usunąć sekcję musi zaktualizować tagi guziki, ale nie chcę, aby przeładować wszystkie elementy z każdej sekcji.

Próbowałem:

  • uzyskać supplementaryViews metodą DataSource CollectionView: viewForSupplementaryElementOfKind: atIndexPath: i nazywają layoutIfNeeded metodę dla każdego supplementaryView, w ten sposób Dodatkowe widoki są przeładowywane, ale to podejście zwielokrotnia moje dodatkowe widoki.
  • szybka dla w collectionView.subviews i dostać tylko supplementaryView i nazywają layoutIfNeeded metodę, ale nie przeładować, tylko układ jest przeładunek.
  • reloadSections: metoda, ale to reload wszystkie pozycje z sekcji

Ohh .. i używam NSFetchedResultsController (delegata) do wstawiania i usuwania części.

Czy ktoś może mi w tym pomóc? Czy istnieje sposób, aby ponownie załadować tylko uzupełniający widok? Czy istnieje inne podejście do tego scenariusza?

Dziękujemy!

+0

I rozwiązać go.Używam niestandardowych * UICollectionViewLayoutAttributes * dla mojego * uzupełnionego widoku *, a jednym z niestandardowych atrybutów jest * NSInteger *, który przechowuje sekcję oraz w metodzie delegowania NSFetchedResultsController * controllerDidChangeContent: * po wstawieniu lub usunięciu sekcji, unieważniam układ widoku kolekcji. Nie jestem pewien, czy to najlepsza praktyka, ale działa i czas jest teraz ważny :) – Irina

Odpowiedz

10

Aby ponownie załadować dodatkowe widoki, można użyć -invalidateLayoutWithContext:.

Zobacz dokumentację dla UICollectionViewLayoutInvalidationContext i metody -invalidateSupplementaryElementsOfKind:atIndexPaths: (dostępne od 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 :) jest dostępny na iOS 8 i wyżej. – testing

+0

Dobry połów. Zaktualizowałem odpowiedź. –

+0

To było stare pytanie, ale dobrze wiedzieć na przyszłość podobne sytuacje. Dzięki! – Irina

Powiązane problemy