如何只关闭堆栈中的最后一个控制器而不一个一个地关闭
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
。这意味着您正在执行模态转场。以上是关于如何只关闭堆栈中的最后一个控制器而不一个一个地关闭的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa Inspector - 如何在关闭最后一个文档后重置窗口标题