在切换到UITabbarController中的其他选项卡之前,关闭当前选项卡上的推入式视图控制器

问题描述 投票:-1回答:1

我具有带有添加的选项卡nav1,nav2,nav3的tabbarcontroller,作为带有关联的rootViewControllers的navigationContollers。我将一个新的viewcontroller(pVC)推送到nav1的rootViewController上。然后,如果单击第二个或第三个选项卡,则应在nav2的rootVC出现之前关闭pVC。以下是Tabar的设置方式

tabbar.setViewControllers([
                nav1,
                nav2,
                nav3
            ]
            .compactMap({ $0.toPresent }),
            animated: false
        )
swift uitabbarcontroller uitabbar pushviewcontroller
1个回答
0
投票

这不是iOS的工作方式。用户期望在选择其他选项卡时其选项卡层次结构保持完整。每次选择一个不同的选项卡时弹出的目的是什么?也许您的UI模型实际上应该是模式表示或其他某种形式的交互。

鉴于,如果您坚持通过违反HIG来打扰用户,则可以成为UITabBarControllerDelegate并实施tabBarController(_:shouldSelect:)。在这里,将您的弹出目录设为根目录,然后返回true。请记住,这是一个同步功能。制作此动画非常重要,因为UINavigationController的动画没有很好的关联。没有完成处理程序等,就像模态演示一样。这是非动画版本:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
  // you need a reference to your nav controller
  if let navController = tabBarController.selectedViewController as? UINavigationController {
    navController.popToRootViewController(animated: false)
  }

  return true 
}
© www.soinside.com 2019 - 2024. All rights reserved.