我具有带有添加的选项卡nav1,nav2,nav3的tabbarcontroller,作为带有关联的rootViewControllers的navigationContollers。我将一个新的viewcontroller(pVC)推送到nav1的rootViewController上。然后,如果单击第二个或第三个选项卡,则应在nav2的rootVC出现之前关闭pVC。以下是Tabar的设置方式
tabbar.setViewControllers([
nav1,
nav2,
nav3
]
.compactMap({ $0.toPresent }),
animated: false
)
这不是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
}