web-dev-qa-db-fra.com

UICollectionView met à jour une seule cellule

J'essaye de mettre à jour une seule cellule à l'intérieur d'un UICollectionView, en particulier j'essaie simplement de mettre à jour une image dans cette cellule spécifique déclenchée par cell.imageView. [self.collectionView reloadData] _ n'est pas vraiment une option, car la vue de la collection entière clignote. [self.collectionView beginUpdates] n'est pas une chose dans un UICollectionViewil semble.

Je comprends que je peux utiliser:

[self.collectionView performBatchUpdates:^{
    //do something
} completion:nil];

Je ne sais pas exactement quoi mettre dans un bloc d'achèvement pour mettre à jour le imageView de cette cellule. Tout cela se fait à l'intérieur de didSelectItemAtIndexPath. De plus, je n'utilise pas NSFetchedResultsController. Des idées?

53
Paulius Dragunas

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths

Voici une méthode pour recharger le indexPaths spécifique dans votre collectionView

75
Dinesh Raja

La réponse de Dinesh est parfaite. Mais pour éviter les animations indésirables lors du rechargement (alias "clignotant"), utilisez:

BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[myCollectionView reloadItemsAtIndexPaths:myIndexPaths];
[UIView setAnimationsEnabled:animationsEnabled];
40
gavdotnet

Voir Insertion, suppression et déplacement de sections et d'éléments dans le "Guide de programmation de la vue de collection pour iOS":

Pour insérer, supprimer ou déplacer une seule section ou un seul élément, procédez comme suit:


Mettez à jour les données dans votre objet source de données. Appelez la méthode appropriée de la vue de collection pour insérer ou supprimer la section ou l'élément. Il est essentiel de mettre à jour votre source de données avant de notifier toute modification à la vue Collection. Les méthodes de la vue collection supposent que votre source de données contient les données correctes actuellement. Si ce n'est pas le cas, la vue de collection peut recevoir le mauvais ensemble d'éléments de votre source de données ou demander des éléments qui ne sont pas présents et provoquer le blocage de votre application.


Ainsi, dans votre cas, vous devez d'abord ajouter une image à la source de données de la vue de collection, puis appeler insertItemsAtIndexPaths. La vue de collection demandera ensuite à la fonction de délégué de source de données de fournir la vue pour l'élément inséré.

4
Vizllx