问题描述
我有一个带有三个表视图控制器的标签栏控制器,第二个VC嵌入在导航控制器中。在第二个VC中,我使用此行self.tabBarController?.tabBar.isHidden = true
将tabBar隐藏起来,并创建了一个条形按钮以返回到第一个视图控制器,这是使用带有模式呈现的segue的“主” VC。
我的问题是,单击后退按钮并从第二个VC返回到原始VC后,即使我将self.tabBarController?.tabBar.isHidden = false
放在原始VC的viewWillAppear方法和第二个VC的viewWilldisappear方法中,tabBar仍然隐藏。 / p>
这是我期望的结果与得到的结果
解决方法
当您使用模式表示形式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出现这种行为。