【问题标题】:How to open the same VC embedded in a Navigation Controller from a TabbarController如何从 TabbarController 打开嵌入在导航控制器中的相同 VC
【发布时间】:2020-08-16 00:22:29
【问题描述】:

有 5 个选项卡,前 2 个选项卡需要打开同一个 VC,该 VC 将嵌入在导航控制器中。所有的 VC 都在故事板中。根据这两个中的哪一个被点击,我需要传递一个值(我想我可以解决这个问题),这将改变该 VC 的一些 UI 组件。

到目前为止,我所拥有的是:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        let indexOfTab = tabBar.items?.firstIndex(of: item)
        switch indexOfTab {
        case 1:
               // Open 1st VC with 'x' UI components
        case 2:
               // Open 1st VC with 'y' UI components
}

所以我可以毫无问题地打开标签页 3 到 5,但前 2 个标签页无法正常工作,因为它们嵌入在导航控制器中。

预期结果:点击标签索引 1,然后点击标签索引 2(或相反)应该打开第二个 VC(或第一个,视情况而定)作为根视图控制器

实际结果:点击索引 1,然后点击标签索引 2(或相反)打开标签索引 1 作为根视图控制器并推送标签索引 2。

如何获得预期的结果?

编辑: 我想我知道为什么会这样。这是因为我在情节提要中为这 2 个 VC 选择了 VC,然后我也试图以编程方式打开它们。无论如何要在故事板和编程的混合中做到这一点,还是我需要以编程方式重构整个标签栏?

【问题讨论】:

    标签: ios swift uiviewcontroller uitabbarcontroller


    【解决方案1】:

    您可以创建两个从 tabBarController 到您想要呈现的 VC 的链接,并为它们分配一个标识符,因此在 prepareForSegue 方法中您可以将您想要的值传递给 VC,如果两个选项卡呈现两个不同的实例,则此方法有效. 相反,如果两个选项卡显示相同的实例,您可以将 VC 的实例保存在 prepareForSegueAction 中或将子 VC 设置为父级的委托(我个人更喜欢第二个选项),然后您可以使用该方法知道何时已按下选项卡并使用方法的实例将所需的值传递给 VC。

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      相关资源
      最近更新 更多