点击tabBar项应始终打开第一个视图控制器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点击tabBar项应始终打开第一个视图控制器相关的知识,希望对你有一定的参考价值。
我有一个带标签栏导航的应用程序(5个按钮)。点击5个标签栏按钮中的一个时,是否可以始终打开导航的第一个控制器?例如,button1打开VC1(带导航控制器),可以打开VC2,可以打开VC3等。如果我在VC3上,然后点击另一个标签栏按钮(比如说按钮2),然后再次点击button1,我希望它打开VC1,而不是我离开它的VC3。
我试过这个,但由于某种原因,它不像我期望的那样工作:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
self.navigationController?.popToRootViewController(animated: true)
viewController.navigationController?.popToRootViewController(animated: true)
}
答案
为了实现这个功能,我在didSelect
的tabBarDelegate
方法中编写代码。
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
let rootView = self.viewControllers![self.selectedIndex] as! UINavigationController
rootView.popToRootViewController(animated: false)
}
另一答案
首先,当用户在选项卡按钮上点击2次时(第一次点击登录到选项卡,第二次点击弹出到根目录),此行为是默认行为。我建议不要编辑此行为,因为它与用户体验有关...
但是,如果你的目标是实现它(只需轻轻一击就弹出根),将tabBarController(_:didSelect:)
实现为:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
navigationController?.popToRootViewController(animated: true)
}
应该足够了,这意味着你的代码片段应该可行!然而问题似乎是该方法甚至没有被调用,因此确保视图控制器确实符合UITabBarControllerDelegate
,并实现:
tabBarController?.delegate = self
将它添加到viewDidLoad()
方法应该没问题。
以上是关于点击tabBar项应始终打开第一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
ios 5 打开一个带有正确 TabBar 和 NavController 包装的特定视图控制器