J'ai une CollectionView qui contient des cellules correspondant aux enfants dans la base de données Firebase. Mon problème est que lorsque je passe à une autre vue, puis se replient, les cellules de CollectionView ont disparu.Comment conserver les cellules CollectionView sur la vue
J'ai une fonction cellForItemAt:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "playerItem", for: indexPath) as! PlayerCollectionViewCell
cell.setupViews(parentSize: Int(self.playerCollectionView.frame.width), hostUID: self.currentUID, tempUserName: playerArrayList[indexPath.item])
cell.layer.cornerRadius = 6
cell.layer.borderWidth = 2
return cell
}
J'ai aussi un autre code snippit:
for i in 0..<playerArrayList.count{
print(playerCollectionView.numberOfItems(inSection: 0))
//playerCollectionView.insertItems(at: [IndexPath(item: i, section: 0)])
let cell = playerCollectionView.cellForItem(at: IndexPath(item: i, section: 0)) as! PlayerCollectionViewCell
cell.tempUserName = playerArrayList[i]
cell.setupViews(parentSize: Int(self.playerCollectionView.frame.width), hostUID: self.currentUID, tempUserName: playerArrayList[i])
}
Je encore à apprendre comment le CollectionView crée des cellules, et ce que le programme fait quand une vue est endormi , mais je crois que mon problème est que la fonction cellForItemAt crée toutes les cellules la première fois que la vue est créée et ne se reproduit plus après. Je suis sûr de cela parce que quand la vue est créée pour la première fois, il y a trois cellules (qui sont exactement combien d'enfants il y a dans la base de données) mais quand on revient à la même vue, il n'y a pas de cellules. J'ai essayé de résoudre ce problème en supprimant toutes les cellules puis en les refaisant. Dans l'extrait de code, vous pouvez voir la ligne a commenté:
playerCollectionView.insertItems(at: [IndexPath(item: i, section: 0)])
mais cela me donne l'erreur:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of items in section 0. The number of items contained in an existing section after the update (3) must be equal to the number of items contained in that section before the update (3), plus or minus the number of items inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).'
J'ai aussi essayé d'utiliser cette option pour créer des cellules:
let cell = playerCollectionView.dequeueReusableCell(withReuseIdentifier: "playerItem", for: IndexPath(item: i, section: 0)) as! PlayerCollectionViewCell
Mais j'ai la même erreur. Comment puis-je recréer les cellules lors du retour à la vue?
Comment êtes-vous segueing retour? Êtes-vous sûr de ne pas avancer vers une nouvelle instance de votre contrôleur de vue d'origine? – Paulw11
@ Paulw11 Les deux vues que je suis en train de basculer sont dans la même pile donc je suis à peu près sûr que ce n'est pas une nouvelle instance. https://drive.google.com/file/d/0B5SQeKTVAsVbSEFweEw0dURVejQ/view?usp=sharing Les segments eux-mêmes proviennent du contrôleur de vue pour afficher le contrôleur et non du bouton pour afficher le contrôleur, car je dois effectuer une opération avant de commencer le tronçonnage. – mike
Si vous n'utilisez pas le bouton "retour" dans votre contrôleur de navigation, vous devez vous assurer que vous utilisez une séquence de déroulement, sinon vous continuez à pousser de nouvelles instances de vos contrôleurs de vue.Placez une instruction log ou un point d'arrêt dans 'viewDidLoad' s'il est appelé plus d'une fois, puis créez une nouvelle instance. – Paulw11