如何在另一个 TabController 中选择 ViewController?

Posted

技术标签:

【中文标题】如何在另一个 TabController 中选择 ViewController?【英文标题】:How can I segue to a ViewController in another TabController? 【发布时间】:2021-02-05 08:35:22 【问题描述】:

我正在 Xcode 中使用 Swift 编写应用程序,但我正在为一件事而苦苦挣扎。

我有一个 UITabBarController。其中有 2 个选项卡,比如说“主页”和“新闻”。

在主页选项卡中,有一个导航控制器,一堆内容,一些按钮与同一选项卡中的其他视图控制器相连接。基本的东西。 在“新闻”选项卡中,有另一个导航控制器和一个显示(您猜对了)一堆新闻的 TableView。当我点击新闻时,我会转到 NewsDetails 视图控制器。也是基本的东西。

现在,我的问题来了。 在主页中,我显示最近的新闻,并且只有这一条。现在,如果我点击这个新闻,我会转到 NewsDetails 视图控制器,但我会留在 Home 选项卡和它自己的 Navigation Controller 中。 我想做的是继续使用 NewsDetails,但在 News Tab 和 News Navigation Controller 中。

总而言之,我正在寻找的行为如下:当我单击主页中的最新新闻时,我希望最终进入“新闻”选项卡,查看新闻详细信息。从那里,如果我点击返回按钮,我将返回新闻标签根目录,而不是主页标签。

我希望我设法让自己足够清楚。任何帮助、指导或领导将不胜感激。

谢谢!

【问题讨论】:

您需要创建UITabViewController 的子类并使用它。您可以在子类中实现prepare(for:sender:),并在嵌入segue 触发时(当标签栏加载时)获取对新闻导航控制器的引用。然后你可以使用你的主视图控制器的委托让标签栏控制器子类知道它应该切换标签并告诉新闻视图控制器显示适当的细节。 【参考方案1】:
if let tabVC = self.tabController 
    tabVC.selectedIndex = 1
    if let navController = tabVC.selectedViewController as? UINavigationController 
        let vc = UIViewController()
        navController.pushViewController(vc, animated: false)
    

由于您提到只有 2 个选项卡,所以我假设新闻是第二个选项卡,因此将 selectedIndex 设置为 1

此外,由于您是从 Home 视图控制器调用它,我们可以使用 self.tabController 直接获取标签栏。或者,您也可以使用 -

let tabVC = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController

【讨论】:

嘿伙计!非常感谢您的回答,这成功了,尽管我不得不改变 NewsDetailViewController 的实例化方式。而不是“让vc = UIViewController()”,我不得不做“让vc:NewsDetailViewController = UIStoryboard(名称:“Main”,bundle:nil).instantiateViewController(withIdentifier:“NewsDetail”)作为!NewsDetailViewController;”干杯!

以上是关于如何在另一个 TabController 中选择 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章

TabController定义顶部tab切换

使用登录屏幕和 TabController 登录的正确技术

TabController 构造函数中的 `vsync` 属性

如何在另一个对象列表中选择对象列表

如何在另一个选择列表的更改功能上更改选择列表的值? [复制]

如何在另一个选择框上使用相关的选择框?