Swift - 远离模态视图而不是正确地破坏ViewController

时间:2016-07-03 15:25:50

标签: swift modal-dialog segue viewcontroller lifecycle

我无法弄清楚如何正确销毁ViewControllers。在我的项目中,我有3个视图控制器。 The Storyboard Layout (IMG)

第一个视图控制器分段到第二个视图控制器。 第二个视图控制器以模态方式分段到第三个视图。当第三个视图出现在屏幕上时,仍然可以在后台看到第二个屏幕(第三个视图具有透明背景)。

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

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

从上面的控制台打印语句中可以看出,ViewController2永远不会被破坏。从逻辑上讲,当VC3重新调回VC1时,我认为它会随着ViewController3一起被破坏。然而,事实并非如此,很可能是因为模态视图在Swift中的工作方式错综复杂。

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

2 个答案:

答案 0 :(得分:0)

我害怕你误解了塞格。从segue ViewController3ViewController1,您只需创建另一个ViewController1的实例,其堆叠高于ViewController3。你不会回去。

您应该使用UINavigationController rootViewControllerViewController1segue推送ViewController2modal segueViewController3的按钮。

ViewController3上,您需要使用dismissViewControllerAnimated(true)以编码方式将其解除,然后执行navigationController?.popViewControllerAnimated(true)返回ViewController1

答案 1 :(得分:0)

归功于vacawama指出解决方案。

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

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