2016-07-01 19 views
0

Ich habe eine programmgesteuerte rightBarButtonItem, die ich einen modalen Übergang zu einem Navigation Controller auslösen möchte. Der Nav Controller ist der "root view controller" für meine Edit View Controller Szene.Übergeben eines Objekts durch einen Stammansicht Controller

Hier ist ein example of what I'm talking about, außer hier ist die Schaltfläche im Storyboard erstellt und so können Sie den Übergang von der Schaltfläche im Storyboard steuern. Das ist die Struktur I über

rede
HomeVC --(modal)--> Navigation Controller --(root view)--> EditVC 

ich kein rightBarButtonItem in meinem Storyboard einfügen können, so habe ich eine programmatisch erstellen und made the segue to the Navigation Controller following this answer.

Mein Zweck hier ist, einen modalen Bildschirm zu präsentieren, um ein Objekt zu bearbeiten, also muss ich dieses Objekt von meinem HomeVC in mein EditVC durch den Navigationssteuerpult übergeben. Das Beispiel in der ersten Verknüpfung war, ein Objekt zu erstellen, also wurde nichts benötigt, um übergeben zu werden.

Hier ist, wo ich jetzt bin. Meine HomeVC (vereinfacht Namen so ist es einfacher zu verstehen) eine navbar mit einem programmatisch erstellt rightBarButtonItem deren Wähler eine Funktion aufruft:

func editButtonPressed() { 
    // doesn't call prepareForSegue unless I prepend super. 
    super.performSegueWithIdentifier("ShowEdit", sender: self)  
} 

Mein Problem liegt in meinem prepareForSegue Funktion:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    print("this one prints") 
    if segue.identifier == "ShowEdit" { 
     print("this one prints") 
     // prints out the UINavigationController, not the EditVC 
     print("segue: \(segue.destinationViewController)") 
     if let editViewController = segue.destinationViewController as? EditViewController { 
      // THIS IS WHAT I WANT TO ACCOMPLISH 
      editViewController.selectedObject = selectedObject 
      print("DOES NOT PRINT") 
     } else { 
      print("this one prints") 
     } 
    } 

Also, wenn Sie Ich kann sehen, worauf ich hinaus will, ich möchte das Objekt von HomeVC an EditVC übergeben, aber mein Segment geht momentan zum Navigation-Root-View-Controller. Wie kann ich es über den Navigationscontroller an die EditVC übergeben?

Ich dachte über die Erstellung eines Controllers für den Nav Controller, so wäre es myNavVC.selectedObject == selectedObject, und dann in myNavVC PrepareForSegue übergeben Sie es mit EditVC.selectedObject == selectedObject, aber was würde ich für den Bezeichner seit seiner Root-Ansicht verwenden?

+0

sind Sie sicher, dass die destVC editVC ist? – pacification

+0

Also ist der destVC jetzt der Navigation Controller, der die root-Ansicht zu editVC ist, weshalb er nicht ins Innere geht, wenn editViewController ... '. Sehen Sie meinen letzten Absatz für das, was ich tun möchte, aber ich kann nicht herausfinden, wie. –

Antwort

3

es Demo in Objective-C:

UINavigationController *navigationController = (UINavigationController*)segue.destinationViewController; 

EditViewController *editViewController = (EditViewController *)[[navigationController viewControllers] firstObject]; 

editViewController.selectedObject = selectedObject; 

Demo in Swift:

if let navigationController = segue.destinationViewController as? UINavigationController { 
    if let editViewController = navigationController.viewControllers.first as? EditViewController { 
       editViewController.selectedObject = selectedObject 
    } 
} 
+0

Ich starte nur iOS-Programmierung, nur verwendet Swift, so dass ich nicht weiß, die Objective-C-Syntax, so dass ich nicht sicher bin, was in der zweiten Zeile geht ' –

+0

Ich aktualisierte Code in Schnell! – Proton

+0

sieht aus wie es funktioniert danke! @pacification Ich habe seinen Code als 'implementiert, wenn navigationController = segue.destinationViewController als? UINavigationController { wenn editViewController = navigationController.viewControllers.first als? EditViewController { editViewController.selectedObject = selectedObject } } 'um Zwangsauspacken loszuwerden, siehst du gut aus? –

Verwandte Themen