【问题标题】:Dismiss a pushed view controller on current tab before switching to a different tab in UITabbarController在切换到 UITabbarController 中的不同选项卡之前关闭当前选项卡上的推送视图控制器
【发布时间】:2019-12-24 07:00:10
【问题描述】:

我有带有三个选项卡的 tabbarcontroller 和 nav1、nav2、nav3 作为它们的 navigationContollers。将新的 viewcontroller(pVC) 推送到 nav1 的 rootViewController 后,单击第二个或第三个选项卡,那么如何在 secondTabs nav2 的 rootVC 出现之前关闭 pushViewController pVC? 以下是tabar的设置方式

tabbar.setViewControllers([
                nav1,
                nav2,
                nav3
            ]
            .compactMap({ $0.toPresent }),
            animated: false
        )

【问题讨论】:

  • 你应该改进你的问题。如果你不改进其他用户对你的问题没有帮助。
  • @EmreDeğirmenci 我改进了它,所以现在更容易理解了。

标签: swift uitabbarcontroller uitabbar pushviewcontroller


【解决方案1】:

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

鉴于此,如果您坚持通过违反 HIG 来惹恼您的用户,您可以通过成为 UITabBarControllerDelegate 并实施 tabBarController(_:shouldSelect:) 来做到这一点。在这里,做你的pop到root,然后返回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 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多