2016-12-30 1 views
1

Ich versuche indexPath der Zelle zu übergeben, die Benutzer tippt, also wenn das Segment collectionView in die richtige Zelle scrollt. Aber ich stecke fest und ich weiß nicht, was ich falsch mache. Hier ist mein Code:Übergabe von indexPath zwischen collectionviews

ERSTE-View-Controller

var selectedRow = 0 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     selectedRow = indexPath.row 
     self.performSegue(withIdentifier: "indexPath", sender: self) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if (segue.identifier == "indexPath") { 
      let nextVC = segue.destination as! ViewController3 
      nextVC.mySelectedRow = selectedRow 
     } 

    } 

SECOND-View-Controller

var mySelectedRow = 0 

override func viewWillAppear(_ animated: Bool) { 
     self.myCollectionView.scrollToItem(at: mySelectedRow, at: .centeredHorizontally, animated: true) 
    } 

Ich erhalte einen Fehler in dieser Zeile.

self.myCollectionView.scrollToItem(at: mySelectedRow, at: .centeredHorizontally, animated: true) 
+0

Wenn Sie Hilfe mit einem Fehler zu fragen Sie den genauen Fehler enthalten müssen, die Sie bekommen, und Zustand, ob es ein Fehler bei der Kompilierung oder einem Laufzeitfehler ist. –

Antwort

2

Methode scrollToItem(at:at:animated:)IndexPath als erstes Argument wollen nicht die Int. Erstellen Sie entweder IndexPath Objekt aus dieser mySelectedRow-Instanz, oder Sie müssen IndexPath Objekt statt Int übergeben.

Wenn Sie den gewünschten Abschnitt nicht wissen, scrollen Sie in collectionView, als Sie indexPath übergeben müssen, anstatt nur die Zeile zu übergeben.

ERSTE-View-Controller

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


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "indexPath") { 
     let nextVC = segue.destination as! ViewController3 
     nextVC.mySelectedIndexPath = sender as! IndexPath 
    } 
} 

SECOND-View-Controller

var mySelectedIndexPath = IndexPath() 

override func viewWillAppear(_ animated: Bool) { 
    self.myCollectionView.scrollToItem(at: mySelectedIndexPath, at: .centeredHorizontally, animated: true) 
} 

Wenn Sie kennen den Abschnitt, den Sie in collectionView bewegen wollen, als einfach wird dies funktionieren.

self.myCollectionView.scrollToItem(at: IndexPath(row: mySelectedRow, section: 0), at: .centeredHorizontally, animated: true) 
+0

Ja, hab es. Ich habe einen neuen Übergang vom View-Controller zu einem anderen View-Controller statt von Zelle zu View-Controller erstellt. Wie auch immer, vielen Dank für Ihre Hilfe und Geduld !! – Volkan

+0

@Volkan Willkommen Kumpel :) –

0

Verwendung wie folgt aus:

self.myCollectionView.scrollToItem(at: IndexPath.init(row: mySelectedRow, section: 0), at: .centeredHorizontally, animated: true) 
+2

Besser noch tun, was Nirav sagt, und hinter dem gesamten IndexPath statt nur die Zeile, da Sammlung Ansichten neigen, beide Zeile und Abschnitt zu verwenden. –

Verwandte Themen