关闭多个推送的视图控制器

Posted

技术标签:

【中文标题】关闭多个推送的视图控制器【英文标题】:Dismiss Multiple Pushed View Controllers 【发布时间】:2016-10-26 01:57:27 【问题描述】:

我正在开发一个应用程序,用户可以在该应用程序上购买一些食物并送到家中。 在某些时候,用户的购物车上有一些产品(显示在选项卡视图控制器中),他去确认他的地址和付款方式(这些是在两个不同的推送视图控制器中制作的)。购买完成后,应用程序会显示一些消息,告知支付是否成功(在他确认后也会显示在推送的视图控制器中)。 因此,在用户完成购买后,我想从购买过程中取消所有这些视图控制器,然后通过点击按钮返回选项卡视图控制器。

如何关闭所有推送的视图控制器?

这是故事板的图像:

【问题讨论】:

【参考方案1】:

您可以使用导航控制器的内置功能弹回根视图控制器。

self.navigationController?.popToRootViewControllerAnimated(true)

这将删除您在导航堆栈上的所有推送视图控制器并返回到堆栈上的基本控制器。您可以在按下按钮时将此功能附加到操作选择器。

【讨论】:

【参考方案2】:

是的,您可以通过以下方式做到这一点。

假设你有这样的结构---

导航控制器--(root)->VCa-->VCb-->VCc-->VCd

现在你在 VCd 并且你想解散或跳到 VCa,然后简单地这样做[self.navigationController popToRootViewController]

这将弹出或关闭所有 VC 并返回到 VCa,因为 VCa 是 Navigation Controller 的根视图控制器。

现在如果你想关闭或弹出到 VCb,然后执行以下操作

 for(UIViewController *vc in self.navigationController.viewControllers)
      if([vc isKindOfClass:[VCb class]])
            // this means you have successfully picked VCb among all the vc
            // inside of the viewControllers in the Navigation stack.
          [self.navigationController popToViewController:vc animated:YES];
      
  

应该这样做。希望这会有所帮助。

【讨论】:

您的回答帮助我在导航层次结构中找到了一个特定的视图控制器,并在该特定视图控制器之前关闭了所有其他视图控制器。谢谢

以上是关于关闭多个推送的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

关闭多个视图控制器

使用多个导航控制器关闭多个模式视图

关闭两个视图控制器,然后推送一个视图控制器 - Swift

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

关闭没有 NavigationController 的推送视图控制器

如何在推送前关闭模型视图控制器?