Swift - 离开模态视图未正确破坏 ViewController

Swift - Segue away from modal view not destroying ViewController properly

我无法弄清楚如何正确销毁 ViewController。在我的项目中,我有 3 个视图控制器。

第一个视图控制器转到第二个视图控制器。 第二个视图控制器模态地转到第三个视图。当第三个视图在屏幕上时,在背景中仍然可以看到第二个屏幕(第三个视图具有透明背景)。

但是,当我离开第三个视图控制器并返回到第一个视图控制器时,处于后台的第二个视图控制器没有被破坏。我记录了视图控制器生命周期事件来说明我的意思:

viewDidAppear - ViewController1
viewWillDisappear - ViewController1
viewDidAppear - ViewController2
viewDidAppear - ViewController3
viewWillDisappear - ViewController3
viewDidAppear - ViewController1

从上面的控制台打印语句可以看出,ViewController2 从未在任何地方被销毁。从逻辑上讲,我假设当 VC3 返回到 VC1 时,它会与 ViewController3 一起被销毁。然而,情况并非如此,很可能是由于模态视图在 Swift.

中的工作方式错综复杂

我该如何解决这个问题?我需要 VC2 来调用 viewWillDisappear

恐怕你误解了segue。通过 segueViewController3ViewController1,您只是在创建另一个堆叠在 ViewController3 之上的 ViewController1 实例。你回不去了。

你应该使用 UINavigationController 来保持你的 ViewController1rootViewControllersegue 推一个 ViewController2modal 一个 segue 的按钮到 ViewController3

ViewController3 上,您需要使用 dismissViewControllerAnimated(true) 在代码中以编程方式关闭它,然后执行 navigationController?.popViewControllerAnimated(true) 返回到 ViewController1

感谢 vacawama 指出解决方案。

当我需要从 ViewController3 返回到 ViewController1 时,我最终实施了 unwind segue。我按照本教程中显示的步骤以编程方式执行此操作:

https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/