Swift: UICollectionView en sélectionnant les problèmes d'indexPath de cellule

Je suis en train de faire un Collection View par lequel quelqu'un choisit un cell et pour chaque sélection, il les prend à un autre View Controller qui contient le contenu de la sélection. Cependant, j'ai un mal de difficultés car une fois que j'applique cette ligne de code pour didSelectItemAtIndexPath;

self.performSegueWithIdentifer("showDetail", sender: self)

et puis l'exécuter dans le Simulateur de la cell de sélection est de travailler selon les indexPath mais son souvenir les sélections chaque fois que je sélectionne de nouveaux cell. Ainsi, par exemple, chaque cell a une photo et de l'étiquette et si je sélectionne la première cell dans le indexPath la segue me prend d'abord à la vue vierge et puis à mon sélectionné cell. Si je choisis un autre cellnuméro 3 sur la indexPath la vue vierge est aujourd'hui le premier cell de mon précédent choix après qu'il faut pour mon troisième cell . Son faire ça à chaque fois. Si je supprime le performSegueWithIdentifer code (à partir de Xcode 6.2 (6.1.1 c'était aléatoire)) la sélection est mon choix précédent et jamais mon selectedCell', mais au moins sa sélectionner seulement une fois au lieu de deux fois pour accéder à un view. Il se passe quelque chose de mal sur le indexPath. C'est le code de mon prepareForSegue

override func prepareForSegue(segue: UIStoryBoardSegue, sender: AnyObject?) {
      if segue.identifer == "showDetail" {
          let detailVC:DetailViewController = segue.destinationViewController as DetailViewController
             detailVC.selectedImageName = selectedImage
             detailVC.selectedLabel = selectedLabels
             }
      }

Je suis coincé sur ce qu'il faut faire & quelle est la solution à appliquer. Dois-je garder performSegueWithIdentifer code & créer un Equatable à mettre en œuvre find(array, selection) sur le indexPath? Ou pourrais-je écrire une boucle, (ce qui semble beaucoup plus facile), qui irait à travers les indexPath basée sur la sélection et à éliminer la cellule qui n'est plus sélectionnée. Cependant, je ne suis pas sûr de ce que la condition à écrire dans la boucle parce que je ne connais pas la valeur de la propriété de l 'selectedCell" parce que c'est facultatif.

for (index, value) in enumerate(cellItems) {
//something here to remove 'selectedItem' in the indexPath
}

Si je supprime performSegueWithIdentifer code de didSelectItemAtIndexPath ce que je peux faire dans mon prepareForSegue pour obtenir la sélection sur la bonne indexPath?

MODIFIER le code complet à didSelectItemAtIndexPath

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
     selectedImage = cellImages[indexPath.row] as String
     selectedLabels = cellLabels[indexPath.row] as String
     self.performSegueWithIdentifer("showDetail", sender: self)
   }

J'ai essayé de changer l'expéditeur dans le performSegueWithIdentifer à indexPath mais le problème persiste.

EDIT 2 code Complet de mon CollectionViewController

class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet weak var collectionView: UICollectionView!
var selectedImage = String()
var selectedLabels = String()
var cellImages:[String] = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpg", "13.jpg", "14jpg"]
var cellLabels:[String] = ["Photo 1", "Photo 2", "Photo 3", "Photo 4", "Photo 5", "Photo 6", "Photo 7", "Photo 8", "Photo 9", "Photo 10", "Photo 11", "Photo 12", "Photo 13", "Photo 14"]
func collectionView(collectionView: UICollectionView, numberOfNumberItemsInSection: Int) -> Int {
return cellImages.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell: PhotoViewCell = collectionView.dequeueReuseableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as PhotoViewCell 
cell.labelCell.text = cellLabels[indexPath.row]
cell.ImageCell.image = UIImage(named: cellImages[indexPath.row])
return cell
}
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
selectedImage = cellImages[indexPath.row] as String
selectedLabels = cellLabels[indexPath.row] as String
self.performSegueWithIdentifer("showDetail", sender: self)
}
override func prepareForSegue(segue: UIStoryBoardSegue, sender: AnyObject?) {
if segue.identifer == "showDetail" {
let detailVC:DetailViewController = segue.destinationViewController as DetailViewController
detailVC.selectedImageName = selectedImage
detailVC.selectedLabel = selectedLabels
}
}
}

PhotoViewCell

class PhotoViewCell: UICollectionViewCell {
@IBOutlet var labelCell: UILabel!
@IBOutlet var ImageCell: UIImage!
}

MODIFIER 3 - Modifié

J'ai essayé ta suggestion et malheureusement le problème est toujours persistant sur le double point de vue - c'est toujours en passant par deux points de vue avant qu'elle m'emmène à la réelle sélectionné cell. J'ai aussi modifié le code légèrement dans le didSelectItemAtIndexPath mais il n'a toujours pas corrigé le problème.

if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? PhotoViewCell {
performSegueWithIdentifier("showDetail", sender: cell) 
}

Cependant suite à votre suggestion de l'autre, dans mon StoryBoard j'ai ajouté un segue de mon Collection View cell à mon DetailViewControllerqui a l'identifiant "showDetail". Si je supprime segue rien ne peut être sélectionné à partir de mon cells.

Il semble bien que la performSegueWithIdentifer code est le déclencheur de la double vue, car lorsque je le supprime, le cell n'est sélectionné qu'une seule fois, le problème était que la indexPath de la cell de sélection n'était pas correct, parce que c'est d'abord la sélection sur une vue vierge (est-ce à voir avec le showDetail segue?), qui met ensuite mon indexPath de la synchronisation.

MODIFIER Résolu

D'arrêter le double de sélections (la performSegueWithIdentifier ligne a été supprimée): -

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
if let cell = collectionView.cellForItemAtIndexPath(indexPath) {
cellLabels[indexPath.row] as String
cellImages[indexPath.row] as String
}
}

Merci beaucoup pour votre aide !!!!

source d'informationauteur j03T