如何只关闭堆栈中的最后一个控制器而不一个一个地关闭

Posted

技术标签:

【中文标题】如何只关闭堆栈中的最后一个控制器而不一个一个地关闭【英文标题】:How to dismiss only last controller in stack without dismissing one by one 【发布时间】:2019-01-24 18:36:05 【问题描述】:

例如我们有 uiviewcontrollers: vc0, vc1, vc2。 Vc0 是根目录,在 vc0 上添加了 vc1,就像在 vc0 上的 presentViewController 一样,在 vc1 上像 presentViewController 一样添加了 vc2。当我尝试从 vc0 动画调用dismissViewController 时,我希望只有 vc2 控制器调用方法 viewWillDisappear 并且只有 vc2 解除动画。但实际上首先解除 vc2,但之后 vc1 使用调用方法 viewDidAppear、viewDidDisappear 解除,并且也使用动画模态解除。我应该怎么做才能同时关闭所有堆栈 vc1 和 vc2 动画?

【问题讨论】:

【参考方案1】:

在 vc1 的 prepare(for segue: UIStoryboardSegue, sender: Any?) 中,您通过做传递实例

vc2.vc1 = self

当然还有在 Vc2 中声明 vc1

然后,当你想解除两者时,你就这样做

self.dismiss(animated: true)
vc1.dismiss(animated: true)

【讨论】:

我根本不使用storyboard和segue) 是的。您说在 vc1 上添加了 vc2,如 presentViewController。这意味着您正在执行模态转场。

以上是关于如何只关闭堆栈中的最后一个控制器而不一个一个地关闭的主要内容,如果未能解决你的问题,请参考以下文章

如何实现“向右拖动以关闭”导航堆栈中的视图控制器?

如何只关闭一个特定的 Excel 工作簿?

Cocoa Inspector - 如何在关闭最后一个文档后重置窗口标题

一次绘制一个图形而不关闭旧图形(matplotlib)

滑动最后一个视图控制器后,如何关闭/弹出 UIPageViewController?

如何使用android [关闭]获取RealmObject中的最后一个修改过的RealmObject或字段