如果通过 segue 从另一个 Tab 进入,如何从控制器中删除 TabBar?

Posted

技术标签:

【中文标题】如果通过 segue 从另一个 Tab 进入,如何从控制器中删除 TabBar?【英文标题】:How to Remove TabBar from a controller if coming in from another Tab by segue? 【发布时间】:2017-07-19 15:07:42 【问题描述】:

我正在使用一个包含 5 个标签的标签栏控制器。在 tab1 中,我有一个按钮可以将我带到我的 tab2。此 tab2 嵌入在导航控制器中。

那么,当我通过 segue 来自 tab1 时,如何使 Tab 栏隐藏在 tab2 中?

在情节提要中,我将Hide Bottom bar on push 设为活动状态。我还写了self.tabBarController?.tabBar.isHidden = true,因为确实加载了tab2。 在 tab1 我的 prepareForSegue 是这样的

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

    if segue.identifier == "ShortcutSegue" 

        let tabVc = segue.destination as! UITabBarController
        tabVc.selectedIndex = 1
        tabVc.tabBarController?.tabBar.isHidden = true
             

【问题讨论】:

【参考方案1】:

对于tab2视图控制器,你可以编写下面的代码来隐藏标签栏。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
  if let destinationTabBar = segue.destinationViewController as? UITabBarController 
    if segue.identifier == "ShortcutSegue" 
      destinationTabBar.viewControllers?.removeAtIndex(adminScreenIndex)
    
  

或者你可以在你的 override func prepareForSegue 方法中编写下面的代码。

if let tabVc = segue.destinationViewController as? tab2ViewController 
  tabVc.hidesBottomBarWhenPushed = true

或者您可以在主情节提要的属性检查器中为下图所示的标签栏视图控制器勾选“按下时隐藏按钮栏”。

Main storyboard attribute inspector "Hide Button Bar On Push"

【讨论】:

它不起作用。第一个解决方案不能放在 tab2 控制器中,因为 Tab2 是我的目标 VC。第二种解决方案没有效果。在提出问题之前已经完成了第三个解决方案。

以上是关于如果通过 segue 从另一个 Tab 进入,如何从控制器中删除 TabBar?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Objective-C:如何从另一个类调用 Push Segue

从另一个班级表演segue

使用辅助函数从另一个类执行 Segue

从另一个 Popover 中关闭显示为 Popover segue 的 ViewController

如何从另一台 PC 进入 AWS Instance

iOS 7 中的 ViewController Undo Segue