点击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)
}
答案

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

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项应始终打开第一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如果在视图控制器中使用 Tabbar,如何设置主视图控制器

TabBar App 模态视图控制器

打开 TabBar 子视图

ios 5 打开一个带有正确 TabBar 和 NavController 包装的特定视图控制器

如何创建一个包含 NavControllers 的 Tabbar,其中包含 tableVCs?

如何声明 Tabbar 项的操作?