从 AppDelegate、Swift 导航到 TabBarController 内的特定视图控制器

Posted

技术标签:

【中文标题】从 AppDelegate、Swift 导航到 TabBarController 内的特定视图控制器【英文标题】:Navigate to a specific View Controller inside a TabBarController from AppDelegate, Swift 【发布时间】:2018-03-13 01:36:11 【问题描述】:

我有一个 TabBarController 有两个标签 Cases & Settings

我想将用户带到像这样嵌套的 CaseSummaryTVC TabBarController > Cases (NavigationController, Storyboard Id = 'tvcNav' ) > CasesTVC (TableViewController) > CaseSummaryTVC (TableViewController, Storyboard Id = 'CaseSummaryTVC')。

我在 AppDelegate 中使用以下代码,这会将我带到“CaseSummaryTVC”,但底部没有显示 TabBar

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let navController = mainStoryboard.instantiateViewController(withIdentifier: "tvcNav") as! UINavigationController

        let caseSummaryTVC = mainStoryboard.instantiateViewController(withIdentifier: "CaseSummaryTVC") as! CaseSummaryTVC

navController.pushViewController(caseSummaryTVC, animated: true)


self.window?.rootViewController = navController
self.window?.makeKeyAndVisible()

【问题讨论】:

【参考方案1】:

看起来您正在将窗口的 rootViewController 设置为“navController”,它似乎没有包含在 UITabBarController 中。

我不确定您的故事板是什么样的,但听起来您在那里正确设置了视图层次结构。

您可以执行以下操作之一:

1) 删除程序化视图控制器实例化,让情节提要负责将 rootViewController 设置为 UITabBarController。

2) 像您在此处对其他视图控制器所做的那样,以编程方式实例化 UITabBarController,并确保将其设置为将 navController 作为其选项卡之一。

【讨论】:

我同意第一个建议,OP 需要在界面构建器或编程路由之间进行选择来处理根视图控制器,因为问题是 OP 推送到导航控制器的错误实例,这解释为什么标签栏被省略。

以上是关于从 AppDelegate、Swift 导航到 TabBarController 内的特定视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 AppDelegate iOS 中单击 FCM 推送通知时导航到特定选项卡 - Swift

在 Swift 中从 AppDelegate 加载嵌入到 UINavigationController 的控制器

swift 的appdelegate导航

通过 UIButton 从 Appdelegate 导航到另一个视图

如何从 Appdelegate 导航到另一个视图控制器

推送通知:从 AppDelegate 导航到 ViewController