使用Segue返回TabBarController的初始ViewController后,TabBar被隐藏

问题描述

我有一个带有三个表视图控制器的标签栏控制器,第二个VC嵌入在导航控制器中。在第二个VC中,我使用此行self.tabBarController?.tabBar.isHidden = true将tabBar隐藏起来,并创建了一个条形按钮以返回到第一个视图控制器,这是使用带有模式呈现的segue的“主” VC。

Screenshot of my StoryBoard

我的问题是,单击后退按钮并从第二个VC返回到原始VC后,即使我将self.tabBarController?.tabBar.isHidden = false放在原始VC的viewWillAppear方法和第二个VC的viewWilldisappear方法中,tabBar仍然隐藏。 / p>

这是我期望的结果与得到的结果

expected home VC

result home VC

如何显示标签栏?

解决方法

当您使用模式表示形式segue时,您正在创建HomeViewController的全新实例。新的HomeViewController未链接到层次结构中的TabBarController。

这是您的初始视图层次结构:

TabBarController
 -> HomeVC
 -> CreateVC (Navigation Controller)
    -> CreateQuizVC
 -> SavedVC

现在,点击“后退”按钮后,您将获得以下内容:

TabBarController
 -> HomeVC
 -> CreateVC (Navigation Controller)
   -> CreateQuizVC
     -> HomeVC(2)
 -> SavedVC

您可以做的是,而不是使用segue来返回,而是在代码中添加IBAction以通过编程方式设置TabBar的selectedIndex,并将Back UIBarButtonItem链接到此IBAction。

@IBAction func backButtonAction(_ backButton: UIBarButtonItem) {
    // Keep in mind that the CreateQuizVC is embeded in a NavigationController.
    // The NavigationController is the child of the TabBarController
    navigationController?.tabBarController?.selectedIndex = 0
    navigationController?.tabBarController?.tabBar.isHidden = false
}

但是,我的建议是您按照Apple的意图使用TabBar。在呈现CreateQuizVC时不要隐藏它,并使用TabBar在选项卡之间导航。这将有助于用户体验,因为iOS上的每个人都期望TabBar出现这种行为。