2017-02-13 1 views
0

Ich habe die folgende Konfiguration: eine Sammlungsansicht mit Menüüberschriften und Menüelementen. Wenn ich einen Menüeintrag auswähle, sollte der Inhalt auf der rechten Seite der Ansicht aktualisiert werden. Auf der rechten Seite der Ansicht habe ich ein Label und ein segmentiertes Steuerelement.Daten an den Controller in der Containeransicht übergeben

Wenn ich ein Element auswähle, sollte es beide Containeransichten aktualisieren (sie haben einen Controller mit eingebettetem Segment). Wenn ich das segmentierte Steuerelement auswähle, wird der andere View-Controller geladen.

Jetzt habe ich versucht, dies:

var selectedItem: String! var services: [String]!

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Loaded collectionView and reloaded 
    selectedItem = services[section].items[row] 
} 

Dann habe ich prepare(for:sender:) verwenden selectedItem an die Steuerung zu übergeben, die auf dem Bildschirm angezeigt wird. Dies funktioniert jedoch nicht, da der Controller bereits geladen ist.

Wie kann ich ein Element in der CollectionView auswählen, legen Sie die Daten in beiden Controllern im ContainerView?

+0

Haben Sie von collectionViewCell segue erstellt ContainerView? –

+0

Nein, ich habe eine Containeransicht im Layout, die einen eingebetteten Übergang zum Controller für diese Containeransicht enthält. Ich bin mir nicht ganz sicher, wie ein Übergang von collectionViewCell zu containerView es beheben sollte? – jbehrens94

+0

Ich frage das, weil es keinen Ruf nach "perfromSegue" gibt? –

Antwort

0

Sie können segue zu ServiceOverViewController entfernen und dann in _, didSelectItemAt: Methode:

  1. Instantiate ServiceOverViewController von aktuellen Storyboard

  2. zuordnen Artikel zu diesem Controller: controller.setupViewWithService(service: item)

  3. Präsens Controller.

-Code wird wie folgt aussehen:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     self.titleLabel.text = services[indexPath.section].items[indexPath.row].name 
     if let overview = services[indexPath.section].items[indexPath.row]{ 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let viewController = storyboard.instantiateViewController(withIdentifier :"ServiceOverViewController") as! ServiceOverViewController 
     viewController.setupViewWithService(service: item) 
     self.present(viewController, animated: true) 
    } 

} 
Verwandte Themen