Ios 快速导航到3个窗口深的ViewController

Ios 快速导航到3个窗口深的ViewController,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有一个ViewController,我想在从锁定屏幕打开推送通知时显示它。 视图控制器嵌入在视图控制器链中,该链为: TabbedBarController(根)->NavigationController0->ViewController0->ViewController1->ViewControllerIWant 我想将推送通知中的两个变量传递到ViewControllerIWant 到目前为止,我已经: let storyboard = UIStoryboard(name: "Main"

我有一个ViewController,我想在从锁定屏幕打开推送通知时显示它。 视图控制器嵌入在视图控制器链中,该链为:

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

我想将推送通知中的两个变量传递到ViewControllerIWant

到目前为止,我已经:

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)
我可以直接加载ViewControllerIWant,但随后会松开导航和选项卡控制器,因此向后移动需要关闭应用程序并重新加载。
如何嵌套VC,以便当用户滑动此通知时加载ViewControllerIWant?

您可以使用segues而不是显示视图控制器来保留导航控制器

一旦segue从您的起始VC创建为您想要的VC,您就给它一个标识符(例如“segueFromVC1ToVCIWant”)

然后调用该方法作为通知的操作:

    self.performSegueWithIdentifier("segueFromVC1ToVCIWant", sender: nil)
最后可以像这样传递变量:

    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
    }
}

确保在ViewControllerIWant中创建同名变量以接收值。

您只需设置navigationController的
viewControllers
。并显示当前的navigationController

在你的例子中,你应该在will之后加上这个(我已经把all改成了小写。你真的不应该用大写作为变量)


根据需要使用
present
push
方法设置所有VCs,传递
animated:false
。(使用
true
来显示/推送
ViewControllerIWant
)只需将导航控制器上的viewControllers属性设置为3个vc的数组即可,因为sSo AppDelegate没有一个方法进行分段
viewControllerIWant.variable1 = "this is the second variable"
naviVC.viewControllers = [viewController0, viewController1, viewControllerIWant]