轻触tabBar项应始终打开第一个视图控制器

时间:2018-09-05 05:57:13

标签: ios swift xcode uinavigationcontroller uitabbarcontroller

我有一个带有标签栏导航的应用程序(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)
}

2 个答案:

答案 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()方法中应该没问题。