当我从另一个视图返回视图时 TabBarController 消失

TabBarController disappears when I segue back to the view from another view

我有一个嵌入在导航控制器中的 viewController。然后将该导航控制器嵌入到选项卡栏控制器中。

我还有另一个 viewController 不应从 tabBarController 访问它。它应该只能从第一个 viewController 使用按钮访问。在 secondViewController 中,我制作了一个 UIBarButtonItem 以移回原始视图。从第一个视图到第二个视图,反之亦然,我使用 Storyboard 引用在视图之间移动。

但是,当我从第一个视图移动到第二个视图时,选项卡栏控制器消失了(就像它应该的那样)。当我回到第一个视图时,标签栏控制器消失了,我不能再在标签之间移动了。

我试过包括:

self.hidesBottomBarWhenPushed = false

第一个视图和

self.hidesBottomBarWhenPushed = true

第二个视图

似乎没有任何效果。每次我从第二个视图移动到第一个视图时,标签栏控制器都会消失。

您遵循的是错误的层次结构。您实际上是在使用 seagues 来回移动。每次您尝试返回第一个控制器时都会创建一个新实例。

让我们说清楚:

您需要遵循以下方法:

1你有两个控制器A和B。

2 在控制器 A 的 viewDidLoad 或 viewWillAppear 中使用 self.hidesBottomBarWhenPushed = true

3 控制器 A 嵌入到导航控制器中,导航控制器进一步嵌入到 UITabBarController 中。

点击控制器 A 中的按钮,您需要按下控制器 B。因此您可以为此使用 segue,或者您可以像这样以编程方式执行此操作:

let controllerB = B()
A.navigationController?.pushViewController(controllerB, animated: true)

4 返回到点击 UIBarButtonItem 上的控制器 A。所以你在 UIBarButtonItem 动作中的代码应该是这样的:

self.navigationController?.popViewController(animated: true)

记住你不应该继续回到以前的控制器。

你应该使用

 override func viewWillDisappear(_ animated: Bool) {
    self.tabBarController?.tabBar.isHidden = false
}

在放置后退按钮的那个控制器中,我在我的应用程序之一中使用了确切的场景。