来自AppDelegate的多个分段

时间:2018-03-18 15:07:15

标签: swift xcode segue

我试图回复一个UNNotificationAction并进入一个详细视图,该视图位于初始视图控制器的第三层。

这就是布局的样子:

Generic segue layout

我希望执行segue A然后执行segue B,从userNotificationCenter_didReceive触发,到目前为止我有这个工作,但它只执行segue A到View Controller 2,我试图触发下一个segue是不成功的

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    if let viewController = self.window!.rootViewController!.storyboard!.instantiateViewController(withIdentifier: "1") as? ViewController1 {
        viewController.performSegue(withIdentifier: "A", sender: nil)
        //It works this far, and loads the View Controller 2
        //Next I need to initiate segue B, to move to View Controller 3
    } 
    completionHandler()
}

如果成功,用户可以返回到视图2,然后查看1,就好像他们在去观看3的路上一样。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用UINavigationController轻松完成此操作。您要求使用segues的解决方案,但segue只是push的接口构建器版本。程序员使用segue是因为他们需要较少的工作,但他们有这样的限制。很明显,您的UI需要额外的导航复杂度,因此我建议您使用导航控制器(您可能已经设置过)。

let firstViewController = storyboard?.instantiateViewController(withIdentifier: "first") as! FirstViewController
let secondViewController = storyboard?.instantiateViewController(withIdentifier: "second") as! SecondViewController
var controllers = navigationController?.viewControllers

controllers?.append(firstViewController)
controllers?.append(secondViewController)

if let controllers = controllers {
    navigationController?.setViewControllers(controllers, animated: true)
}

这将创建一个动画,就像用户直接推送到第二个视图控制器一样,但当用户向后导航时会弹出到第一个视图控制器。