点击tabBar项应始终打开第一个视图控制器

问题描述 投票:0回答:2

我有一个带标签栏导航的应用程序(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)
}
ios swift xcode uinavigationcontroller uitabbarcontroller
2个回答
1
投票

为了实现这个功能,我在didSelecttabBarDelegate方法中编写代码。

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
            let rootView = self.viewControllers![self.selectedIndex] as! UINavigationController
            rootView.popToRootViewController(animated: false)
     }

0
投票

首先,当用户在选项卡按钮上点击2次时(第一次点击登录到选项卡,第二次点击弹出到根目录),此行为是默认行为。我建议不要编辑此行为,因为它与用户体验有关...

但是,如果你的目标是实现它(只需轻轻一击就弹出根),将tabBarController(_:didSelect:)实现为:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
  navigationController?.popToRootViewController(animated: true)
}

应该足够了,这意味着你的代码片段应该可行!然而问题似乎是该方法甚至没有被调用,因此确保视图控制器确实符合UITabBarControllerDelegate,并实现:

tabBarController?.delegate = self

将它添加到viewDidLoad()方法应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.