【问题标题】:How to popToRootViewController with multiple viewControllers on the navigationController stack and show only one transition?如何在 navigationController 堆栈上使用多个 viewController 弹出ToRootViewController 并仅显示一个转换?
【发布时间】:2020-08-29 07:35:48
【问题描述】:

如何popToRootViewController在navigationController栈上有多个viewControllers (2)并且只显示一个transition?

例如,VC A 将 VC B、C 推入导航堆栈。现在我想要从 C 到 A 的平滑动画过渡而不显示 B。

我尝试了很多东西,但我总是看到 B。

例如我试过:

self.navigationController?.viewControllers.removeLast()
self.navigationController?.popToRootViewController(animated: true)

还有:

func popBack<T: UIViewController>(toControllerType: T.Type) {
   if var viewControllers: [UIViewController] = self.navigationController?.viewControllers {
      viewControllers = viewControllers.reversed()
      for currentViewController in viewControllers {
         if currentViewController .isKind(of: toControllerType) {
            self.navigationController?.popToViewController(currentViewController, animated: true)
            break
         }
       }
   }
}

除了用动画 false 弹出然后用动画 true 弹出,但我总是看到 B。 有很多 SO 线程,我尝试的不仅仅是我上面所说的。

【问题讨论】:

  • popToRootViewController 就是为了这个目的......但是你面临什么问题呢?
  • 如果您在拨打self.navigationController?.popToRootViewController(animated: true) 时看到VC B,则说明您做错了。假设您是通过点击按钮执行此操作的,您是否还从按钮分配了一个 segue 回 VC B
  • @DonMag 点击后退按钮并在 ViewWillDissappear 中调用 popToRootViewController 方法。这可能是我不需要自动转场的问题。
  • @bhartsb - 是的....这不会给你你想要的。如果您希望 Back 按钮将用户带回 Root 控制器(这可能对用户来说有点奇怪和不直观,但如果这是您想要的),那么您可能需要从到达C时的堆栈。
  • @DonMag 我会试试的。行为是产品要求,虽然不是规范,但在特定情况下确实有意义。

标签: ios swift uiviewcontroller uinavigationcontroller


【解决方案1】:

Storyboard and views

self.navigationController?.popToRootViewController(animated: true)

只有使用这条线对我有用。

【讨论】:

  • 不,这对我不起作用。 C 先转换到 B,然后再转换到 A。在我的 OP 中,我只想看到从 C 到 A 的转换。
猜你喜欢
  • 1970-01-01
  • 2010-12-14
  • 2021-07-15
  • 1970-01-01
  • 2017-11-11
  • 2019-08-08
  • 1970-01-01
  • 2017-10-03
  • 2014-09-09
相关资源
最近更新 更多