collectionView: reloadData œuvres, reloadItemsAtIndexPaths n'
J'ai un UICollectionView
dont la source de données de changements, parfois, quand l'écran. Pour mettre à jour lorsqu'il revient, je l'ai écrit dans le CollectionViewController
:
override func viewWillAppear(animated: Bool) {
self.collectionView!.reloadData()
}
...et qui fonctionne, mais je n'ai jamais besoin de mettre à jour plus d'une ou deux cellules de mon UICollectionView
, alors j'ai pensé que ce serait mieux si j'ai remplacé la version ci-dessus avec:
override func viewWillAppear(animated: Bool) {
self.collectionView!.reloadItemsAtIndexPaths(myArrayOfIndexPaths)
}
...mais quand je le fais, Xcode me donne un message d'erreur indiquant:
Opérande de postfix '!' doit avoir en option type, supprimer '!'".
Quand je supprime le '!', il est dit que UICollectionView
ne dispose pas d'un membre nommé reloadItemsAtIndexPaths
. Ce que je fais mal?
Afficher la version du code avec
Êtes-vous à l'aide d'un UICollectionViewController, ou un UIViewController avec une vue de collection? Si celui-ci, comment êtes-vous en déclarant "collectionView"?
J'ai édité ma question afin de montrer ma tentative avec
Comment voulez-vous créer
Je n'ai pas d'erreur lorsque j'utilise le code (en remplacement de myArrayOfIndexPaths avec [NSIndexPath(forItem: 0, inSection: 0)]). Avez-vous d'ajouter une prise de courant pour l'affichage de la collection (ou êtes-vous à l'aide de la prise de courant que vous obtenez avec la collection de-vue-contrôleur)? Parfois Swift erreurs ne sont pas très bon, essayez de remplacer myArrayOfIndexPaths avec ce que j'avais, et de voir si les silences de l'erreur.
reloadItems
Êtes-vous à l'aide d'un UICollectionViewController, ou un UIViewController avec une vue de collection? Si celui-ci, comment êtes-vous en déclarant "collectionView"?
J'ai édité ma question afin de montrer ma tentative avec
.reloadItemsAtIndexPaths
@rdelmar - je suis à l'aide d'un UICollectionViewController merci!Comment voulez-vous créer
myArrayOfIndexPaths
?Je n'ai pas d'erreur lorsque j'utilise le code (en remplacement de myArrayOfIndexPaths avec [NSIndexPath(forItem: 0, inSection: 0)]). Avez-vous d'ajouter une prise de courant pour l'affichage de la collection (ou êtes-vous à l'aide de la prise de courant que vous obtenez avec la collection de-vue-contrôleur)? Parfois Swift erreurs ne sont pas très bon, essayez de remplacer myArrayOfIndexPaths avec ce que j'avais, et de voir si les silences de l'erreur.
OriginalL'auteur Le Toucan Sale | 2015-01-13
Vous devez vous connecter pour publier un commentaire.
À partir de votre code, il semble que vous avez déclaré votre collectionView comme Option (avec ?) à la fin, et peut-être lié à votre storyboard à l'aide d'un @IBOutlet. Pour résoudre votre problème, vous devez supprimer l' ? de la :
@IBOutlet var collectionView: UICollectionView?
et le remplacer par:
@IBOutlet var collectionView: UICollectionView!
de cette façon vous dire au compilateur que votre collectionView certainement existe (parce que vous avez lié à partir de votre storyboard).
Alternativement, vous pouvez lier votre collectionView en faisant ceci:
Vous êtes les bienvenus!
OriginalL'auteur Valentin
Swift 4 recharger tous les éléments de la section
OriginalL'auteur Vac
Swift 3 version du code
J'espère code suivant vous aider à le comprendre. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { indexPaths.append(indexPath) }
Je comprends le code. le problème est que reloadData() n'est pas mis à jour mon indexPaths même si ma source de données a été rempli. cela signifie que je ne peut pas accéder aux valeurs à la hausse des indices (à partir du serveur), mais je n'ai accès qu'aux données de l'échantillon-je entrer manuellement avant de télécharger les données du serveur.
Désolé pour la réponse tardive, j'ai été occupé avec la charge de travail. J'ai besoin de comprendre votre scénario dans les détails si vous toujours pas à résoudre le problème, veuillez écrire ici en détail, donc je peux vous apporter mon effort pour résoudre votre problème. Merci
cette réponse n'aide pas... s'il vous plaît ajouter plus de détails dans la réponse, où écrire votre code? le contexte plus large
OriginalL'auteur mriaz0011
Si vous souhaitez recharger pour une seule cellule, vous pouvez spécifier le spécifique de la cellule comme ceci :-
Espère que cette aide.
OriginalL'auteur Nizzam