Swift 如何使用推送通知从AppDelegate打开特定uitabbarcontroller?

Swift 如何使用推送通知从AppDelegate打开特定uitabbarcontroller?,swift,xcode,swift3,xcode8,appdelegate,Swift,Xcode,Swift3,Xcode8,Appdelegate,我正在应用程序上使用推送通知。因此,当我收到通知并触摸它时,我想转到另一个UITabbarcontroller,但当我这样做时,应用程序只显示UINavigationbar,而不显示UITabbarcontroller。这是一个屏幕截图--> 这是我的密码 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "RequestDriverViewCo

我正在应用程序上使用推送通知。因此,当我收到通知并触摸它时,我想转到另一个
UITabbarcontroller
,但当我这样做时,应用程序只显示
UINavigationbar
,而不显示
UITabbarcontroller
。这是一个屏幕截图-->

这是我的密码

         let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "RequestDriverViewController") as! RequestDriverViewController

         let nc = UINavigationController(rootViewController: vc)

         self.window = UIWindow(frame: UIScreen.main.bounds)
         self.window?.rootViewController = nc
         self.window?.makeKeyAndVisible()

我能够解决这个问题:

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TabBarIdentifier") as! UITabBarController

        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = vc
        self.window?.makeKeyAndVisible()

请阅读文档中的“响应通知和事件”部分:您需要提供有关导航控制器/选项卡栏控制器层次结构的详细信息。通常有一个sibfly选项卡栏控制器,它又包含几个导航控制器,因此通常的方法是切换到所需的选项卡,可能会在途中弹出不需要的视图控制器,但您的具体情况可能会完全不同…@jcaron感谢您的评论,真的很有帮助,我有很多工作,因此我看不出我应该先访问UIABBarController标识符,然后再访问UIViewcontroller。这就是我用来解决问题的代码:让vc=UIStoryboard(名称:“Main”,bundle:nil)!UIAbbarController self.window=UIWindow(框架:UIScreen.main.bounds)self.window?.rootViewController=vc self.window?.makeKeyAndVisible()许多thanks@matt谢谢你的回答,真的对我很有帮助。如果选项卡栏控制器已经存在,您很可能不应该再次实例化它,您只需检索它并对其进行任何必要的更改(例如更改当前活动的选项卡)@jcaron,然后,如果应用程序位于后台。。。我如何取回它?为此,我认为有必要创建一个实例,但我可以做一个“如果”,验证应用程序是否在后台或否。如果是,则实例化,如果不是,则检索它。但是,如何检索此UItabBarController?请使用windows的
rootViewController
。检查它是否不是nil,并且它是
UITabBarController
的实例,然后使用它。