2016-07-19 4 views
3

Ich habe eine ViewController, die ich darstellen möchte, wenn eine Push-Benachrichtigung vom gesperrten Bildschirm geöffnet wird. View-Controller innerhalb einer Kette von View-Controller eingebettet ist, die Kette ist:Swift Navigieren zu ViewController das ist 3 Fenster tief

TabbedBarController (root) -> NavigationController0 -> ViewController0 -> ViewController1 -> ViewControllerIWant

Ich habe zwei Variablen aus der Push-Benachrichtigung I wollen in ViewControllerIWant

habe ich bisher weitergeben müssen:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let rootVC = storyboard.instantiateViewControllerWithIdentifier("HomeVC") as! UITabBarController // HomeVC is the TabbedBarController 
let NaviVC = storyboard.instantiateViewControllerWithIdentifier("NavigationController0") as! UINavigationController // NavigationController0 is the Navigation Controller for this stack 

let ViewController0 = storyBoard.instantiateViewControllerWithIdentifier("ViewController0") as ViewController0 
let ViewController1 = storyBoard.instantiateViewControllerWithIdentifier("ViewController1") as ViewController1 
let ViewControllerIWant = storyBoard.instantiateViewControllerWithIdentifier("ViewControllerIWant") as ViewControllerIWant 

// Pass the Variables into ViewControllerIWant 
ViewControllerIWant.Variable0 = "This is the first Variable" 
ViewControllerIWant.Variable1 = "this is the second variable" 
// Load the VC 
self.presentViewController(ViewControllerIWant, animated:true, completion:nil) 

ich ViewControllerIWant laden kann direkt, aber dann die Navigation und Tab controll verlieren Um sich rückwärts zu bewegen, müssen Sie die App schließen und neu laden. Wie verschachtele ich die VCs, so dass wenn der Benutzer diese Benachrichtigung wischt lädt ViewControllerIWant?

+1

Richten Sie alle VCs die Verwendung von "Präsentieren" und "Drücken" -Methoden wie angemessen, wobei "animiert: falsch" weitergegeben wird. (Verwenden Sie 'true' zum Präsentieren/Drücken von' ViewControllerIWant'.) –

+0

Setzen Sie einfach die Eigenschaft viewControllers auf Ihrem Navigationscontroller auf Ihr Array von 3 vcs – CSmith

Antwort

0

Sie können Ihre Navigation Controller halten, indem segues statt präsentieren View-Controller

mit Sobald der Übergang von Ihrem Ausgangs VC in die gewünschte VC erstellt wird, geben Sie es eine Kennung (z „segueFromVC1ToVCIWant“).

rufen dann die Methode als eine Aktion Ihrer Mitteilung:

self.performSegueWithIdentifier("segueFromVC1ToVCIWant", sender: nil) 

schließlich die Variablen wie dies passieren kann:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "segueFromVC1ToVCIWant"){ 
      let viewControllerIWant = segue.destinationViewController as! ViewControllerIWant 
      ViewControllerIWant.variable0 = self.variable0 
      ViewControllerIWant.variable1 = self.variable1 
    } 
} 

Stellen Sie sicher, dass Variablen mit dem gleichen Namen in ViewControllerIWant erstellen, um um die Werte zu erhalten.

+0

So AppDelegate hat keine Methode zu segnen –

1

Sie können einfach den viewControllers des navigationController einstellen. Und zeige den aktuellen navigationController.

In Ihrem Beispiel sollten Sie diese hinzufügen, nachdem die Linie sein wird (ich habe alle einem Klein ändern. Sie sollten wirklich keine Großbuchstaben als Variable verwenden)

viewControllerIWant.variable1 = "this is the second variable" 
naviVC.viewControllers = [viewController0, viewController1, viewControllerIWant] 
Verwandte Themen