我试图回复一个UNNotificationAction并进入一个详细视图,该视图位于初始视图控制器的第三层。
这就是布局的样子:
我希望执行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的路上一样。
由于
答案 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)
}
这将创建一个动画,就像用户直接推送到第二个视图控制器一样,但当用户向后导航时会弹出到第一个视图控制器。