将主标签栏添加到其他视图控制器

Posted

技术标签:

【中文标题】将主标签栏添加到其他视图控制器【英文标题】:Add Main Tab Bar to Other View Controller 【发布时间】:2019-04-11 18:52:55 【问题描述】:

我是一名新的 Swift 开发人员。我正在使用 Swift 4.2 和 XCode 10.2。

我有一个带有 5 个标签栏项目的标签栏控制器。在每个选项卡栏项目的视图控制器中,有一个按钮可以在不同的视图控制器中显示平衡(称为平衡视图控制器)。我从每个按钮到 Balance View Controller 都有一个 segue。

我正在使用界面生成器,但很乐意添加代码。

如何将主标签栏放在余额视图控制器上,这样当用户查看完余额后,他可以选择另一个标签栏项目并继续前进?我拒绝使用导航控制器,因为后退按钮会干扰每个屏幕顶部的统一视图,我不想调整它。

我找不到任何解决此问题的 SO 问题。我发现的所有其他网络资源都是关于如何实现标签栏的非常基础的。任何帮助将不胜感激。

【问题讨论】:

有人能解释一下为什么会被否决吗?是风格问题吗?菜鸟问题太多了?我想学会在未来防止同样的事情发生。 【参考方案1】:

另一种方法:

Balance View Controller 加载为子ViewController,并将其视图显示在当前视图之上。这将使标签栏保持不变,允许用户导航到另一个标签。

Balance View Controller 听起来只是一个信息显示。如果是这样,您可以添加一个轻点手势,只需轻点一下,即可将其从当前视图中移除。

如果Balance View Controller 是交互式的,您可以添加一个按钮将其从当前视图中移除。

既然您说在每个选项卡的 VC 中都有一个按钮来显示 Balance View Controller,那么您可能还希望在选择另一个选项卡时将其从当前视图中删除。

【讨论】:

是的。这就是我正在寻找的。如果我嵌入导航控制器并将其隐藏,当我到达平衡视图控制器并选择不同的选项卡(不是我来自的选项卡)时,我会转到那个新选项卡。但是当我选择第一个带我进入平衡视图控制器的选项卡时 - 平衡视图控制器仍然存在!我必须再次点击相同的选项卡图标才能返回该选项卡的视图控制器。 我可以从ViewWillDisappear 的视图中删除孩子吗?这样在平衡视图控制器中我总是可以在转到任何其他选项卡之前将其删除? 谢谢。我会试一试并报告。 BalanceViewController 有一个表格视图。我不断收到一个错误,即tableview.datasource(即自我)为零。我尝试使用父级中的BalanceViewController 实例和其他几种方法来设置它,但它总是相同的错误。我在子视图控制器的文档中看到父视图控制器控制数据,但我不知道如何让BalanceViewController 成为它自己的数据源。故事板中另一个 VC 的转场正确显示了BalanceViewController,所以我知道它没有损坏。这是设置孩子的代码: 让 parent = self let balanceVC = BalanceViewController() parent.view.addSubview(balanceVC.view) parent.addChild(balanceVC) balanceVC.didMove(toParent: parent)【参考方案2】:

我拒绝使用导航控制器,因为后退按钮会干扰每个屏幕顶部的统一视图,我不想调整它。

实现这一点的最佳方法是使用UINavigationController,我们可以对顶部导航栏做些什么,而该死的back button 是我们可以隐藏整个内容

// Add this to your viewcontroller
override func viewDidLoad() 
    super.viewDidLoad()

    self.navigationController?.isNavigationBarHidden = true

如果你想更进一步,你可以禁用视图控制器的动画

希望对你有帮助

【讨论】:

如果后退按钮被隐藏,如何回到上一个视图控制器? 我以为你不想要返回按钮,好吧,所以你必须使用dismiss(animated: true, completion: nil) 来返回按钮点击,现在你可以使用navigationController?.popViewController(animated: true) 谢谢。我想使用主标签栏而不是任何其他按钮,因为除了 Balance View Controller 之外,您可以在应用程序中访问的唯一位置都列在标签栏上。但我没有办法做到这一点。如果我必须添加一个后退按钮,我会使用你的建议。 我想我理解错了。当我使用隐藏的导航控制器时,它会将标签栏保持在底部。我可以使用标签栏继续浏览应用程序,并且不需要返回按钮。我会继续测试并标记为答案。 @TMLynch 是的,标签栏将保留在底部,很高兴为您提供帮助:)

以上是关于将主标签栏添加到其他视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

移动到其他视图控制器时的标签栏

将 TabBArController 添加到 UIView

想在标签栏视图控制器中添加一个简单的导航栏

将标签栏添加到导航控制器

将 UINavigationController 添加到 UITabBarController 而不在所有视图中显示标签栏

如何将“更多”按钮添加到标签栏?