【发布时间】: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