1

Les choses d'abord: PremièreComment Recharger UICollectionView Voir supplémentaire (HeaderView)

  1. Je ne veux pas de recharger CollectionView entier.
  2. Je ne veux pas non plus recharger la section non plus (puisque c'est la même chose que reloadData parce que mon cv n'a qu'une section).

Je mis quelques contrôles dans la vue supplémentaire depuis cette vue agit comme une vue d'en-tête. Dans certains cas, je veux cacher/montrer les contrôles au besoin. Pour ce faire, j'ai besoin de recharger la vue supplémentaire car les données sont déjà mises à jour.

Ce que j'ai essayé:

UICollectionViewLayoutInvalidationContext *layoutContext = 
[[UICollectionViewLayoutInvalidationContext alloc] init]; 
[layoutContext invalidateSupplementaryElementsOfKind:UICollectionElementKindSectionHeader 
             atIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]]; 
[[_collectionView collectionViewLayout] invalidateLayoutWithContext:layoutContext]; 

Cet accident bien sûr. Le code ne semble pas correct non plus, mais je ne suis pas sûr comment construire le UICollectionViewLayoutInvalidationContext correctement et dire à la collection de recharger seulement la vue supplémentaire.

Merci.

Répondre

-1

Je ne sais pas comment vous avez regroupé les cellules de la vue de collection.

La solution la plus simple serait de recharger la cellule particulière en utilisant:

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths 
+0

Ceci recharge uniquement la cellule normale. Je veux recharger la vue supplémentaire. Désolé, j'ai édité ma question pour indiquer la vue supplémentaire – GeneCode

+0

Dans ce cas, vous pouvez peut-être parcourir toutes les sous-vues de votre uicollectionview et setNeedsDisplay uniquement sur headerView. Vous pouvez utiliser la propriété tag pour identifier l'en-tête. – diOS

+0

setNeedsdisplay ne recharge pas la vue. ça le rafraîchit juste. – GeneCode

1

Si vous avez seulement besoin de mettre à jour la vue d'en-tête d'une section particulière, vous pouvez faire quelque chose de similaire à ceci:

if let header = collectionView.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: indexPath.section)) as? MyCollectionHeaderView { 
    // Do your stuff here 
    header.myLabel.isHidden = true // or whatever 
} 

Le fragment de code IndexPath(item: 0, section: indexPath.section) peut sembler un peu bizarre, mais il s'avère que le supplementaryView n'est renvoyé que sur le premier élément de la section.