2015-04-29 1 views
0

Je crée une application iOS dans Swift et je rencontre un obstacle sur lequel je semble être bloqué. J'ai un CollectionView peuplé par un tableau de chaînes, qui sont les noms des images que je suis peuplant l'image dans les cellules main collection:Aide iOS CollectionView (enregistrement de l'état actuel)

var tableData: [String] = ["cricket1.png", "cricket1.png", "cricket1.png"] 

J'ai lié les images au CollectionView avec le code suivant:

//How many cells there are is equal to the amount of items in tableData (.count property) 
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return tableData.count 
} 

//Linking up collectionView with tableData 
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell: CricketCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CricketCell 
    cell.imgCell.image = UIImage(named: tableData[indexPath.row]) 
    return cell 
} 

Lorsque je l'utilisateur appuyez sur la cellule, l'image passe de cricket1.png à cricket2.png:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
     println("Cell selected") 

     var cell = collectionView.cellForItemAtIndexPath(indexPath) as! CricketCell 


      if cell.imgCell.image == UIImage(named:"cricket1.png"){ 
       var cell = collectionView.cellForItemAtIndexPath(indexPath) as! CricketCell 
       cell.imgCell.image = UIImage(named:"cricket2.png") 

      } 

maintenant .. voici où je ne parviens pas à. J'essaie actuellement d'enregistrer des données dans tableData, mais quand je le fais, il l'enregistre toujours comme ["cricket1.png", "cricket1.png", "cricket1.png"]. Même si l'image a été tapée et modifiée en "cricket2.png". Même si toutes les images sur l'écran sont cricket2.png, quand je sauvegarde tableData, il l'enregistre comme ["cricket1.png", "cricket1.png", "cricket1.png"]. Je suis conscient que c'est parce que je stocke la variable tableData que j'ai déclarée précédemment, mais est-il possible de saisir un tableau de chaînes de ce qui est sur l'écran/l'état actuel de la collection?

Toute aide serait appréciée!

Merci!

+0

montrez-vous exactement les données? Le fait est que vous n'avez modifié aucune donnée dans tableData en fonction de ce que je vois. –

+0

Je n'ai rien changé dans tableDat. Mais quand je cours l'application, et j'appuie sur la cellule, l'image (qui est cricket1.png, et vient du tableau tableData) change en une autre image. Lorsque vous modifiez l'image, il ne met pas à jour le tableau dans tableData. Comment puis-je m'y prendre? –

Répondre

1

Vous devez mettre à jour les données dans le tableau vous-même. C'est indépendant de l'image. Dans ce cas, même si vous actualisez la table, l'image se chargera selon la nouvelle tableDataData.

+0

MERCI !!!! Cela a fonctionné incroyable. Tout ce que je devais faire était de changer! = To ==. Tu m'as sauvé des heures de stress sur mon projet d'école finale haha. –

+0

Désolé, cela a pris tellement de temps pour upvote. Je viens de rejoindre, donc je ne le laisserais pas faire jusqu'à ce que je gagne assez de "xp" hahah –

0

Je recommanderais d'utiliser une autre propriété pour conserver l'état de la cellule. Par exemple,

var selectedState = [true, false, true, true, true]

Sur tapotant l'image, mettre à jour l'image et le réseau selectedState en conséquence. Par exemple,

if selectedState[indexPath.row] { cell.imgCell.image == UIImage(named:"cricket1.png") else { cell.imgCell.image = UIImage(named:"cricket2.png") }

Une fois que vous êtes prêt à saisir l'état des cellules taraudés, vous pouvez utiliser la variable tableau selectedState.

Vous ne pouvez pas utiliser la cellule pour conserver un état car la cellule peut être retirée par collectionView et peut perdre son état lors du défilement.

Espérons que cela aide.