2017-02-18 3 views
-2

Ich versuche, eine Beschriftung, die in einer Collection-View-Zelle enthalten ist, an einen anderen View-Controller mit einem Segment zu senden.So senden Sie eine Sammlung View Cell Text über Segue

Mein Plan ist, dass wenn ein Benutzer auf die Sammlungsansichtszelle klickt, die App zum nächsten Ansichtscontroller übergeht, wo der Titel der Navigationsleiste den Text des Labels in der ausgewählten Sammlungsansichtszelle anzeigt.

Ich habe dies versucht:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CCCollectionViewCell 

    //itemSelected = items[indexPath.row] as String 

    itemSelected = cell.pLabel.text! 

    print(itemSelected) 
} 

und in prepareForSegue habe ich keinen Code geschrieben, wie ich bin nicht sicher, wie das funktioniert.

Ich habe den Block '..items [indexPath.row] als String' auskommentiert, weil es die Beschriftung nicht anzeigt und die Druckfunktion hinzugefügt hat, um zu sehen, was ausgegeben wird, aber es gibt nur den im Storyboard angegebenen Namen aus.

Ich bin sehr neu in Xcode, also nicht vertraut mit didSelect und preparedForSegue. Alles, was ich versuche, ist, den Text innerhalb einer Collection-View-Zelle an einen anderen View-Controller mit einem Segment zu senden.

Antwort

0

Von Ihrem Code, den Sie nicht rufen die performSegue(withIdentifier:sender:) so haben Sie wahrscheinlich von der CollectionViewCell zu DestinationViewController erstellt segue haben. So erhalten Sie den IndexPath mit dieser Zelle in prepareForSegue Methode.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if let cell = sender as? UICollectionViewCell, 
     let indexPath = self.collectionView.indexPath(for: cell) { 

     let vc = segue.destination as! SecondViewController //Cast with your DestinationController 
     //Now simply set the title property of vc 
     vc.title = items[indexPath.row] as String 
    } 
} 
0

Sie müssen also die Zelle in didSelect nicht einrichten, da Sie dies bereits in cellForItemAtIndexPath tun.

Eher möchten Sie performSegue(withIdentifier: "SegueName", sender: indexPath) in Ihrem didSelectItemAtIndexPath aufrufen. Dann in Ihrem prepareForSegue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    guard let indexPath = sender as? IndexPath else { return } 

    let collectionCell = collectionView.cellForItem(at: indexPath) 
    let textToPass = collectionCell.textLabel.text 

    let detailVC = segue.destination as? DetailViewController 
    detailVC.passedInString = textToPass 
} 
2
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

     self.performSegue(withIdentifier: "contentVideoSegue", sender: indexPath) 

} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "contentVideoSegue"{ 
     let selectedIndexPath = sender as? NSIndexPath 
     let videoContentVC = segue.destination as! VideoContentController 
     videoContentVC.text = items[selectedIndexPath.row] as String 
    } 
} 

in der Hoffnung, ruft sugue :)

+0

bitte eine Beschreibung hinzufügen, helfen die Antwort – jjj

+0

Zum einen in der didSelectItemAt indexPath Verfahren erläutern. Nach dieser Aufrufüberschreibung beginnt die Funktion func prepared (for segue) zu arbeiten. @jjj –

Verwandte Themen