我有一个带有标签栏导航的应用程序(5个按钮)。轻触5个标签栏按钮之一时,是否可以始终打开导航的第一个控制器?例如,button1打开VC1(带有导航控制器),可以打开VC2,可以打开VC3,依此类推。如果我使用的是VC3,则单击另一个选项卡栏按钮(例如button2),然后再次单击button1,我希望它打开VC1,而不是我留在它上面的VC3。
我尝试过此操作,但由于某种原因,它无法正常工作:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
self.navigationController?.popToRootViewController(animated: true)
viewController.navigationController?.popToRootViewController(animated: true)
}
答案 0 :(得分:1)
要实现此功能,我用didSelect
的{{1}}方法编写代码。
tabBarDelegate
答案 1 :(得分:0)
首先,当用户在选项卡按钮上单击2次时,此行为是默认行为(第一次单击用于登录到选项卡,第二次单击用于弹出到根)。我建议不要编辑此行为,因为它与用户体验有关...
但是,如果您要实现它(只需轻按一下即可跳到根目录),则将tabBarController(_:didSelect:)
实施为:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
navigationController?.popToRootViewController(animated: true)
}
应该就足够了,这意味着您的代码段应该可以工作!尽管如此,问题似乎是该方法甚至没有被调用,因此请确保视图控制器确实符合UITabBarControllerDelegate
并实现:
tabBarController?.delegate = self
将其添加到viewDidLoad()
方法中应该没问题。