我无法弄清楚如何正确销毁ViewControllers。在我的项目中,我有3个视图控制器。
第一个视图控制器分段到第二个视图控制器。 第二个视图控制器以模态方式分段到第三个视图。当第三个视图出现在屏幕上时,仍然可以在后台看到第二个屏幕(第三个视图具有透明背景)。
但是,当我离开第三个视图控制器并返回到第一个视图控制器时,后台中的第二个视图控制器不会被破坏。我记录了视图控制器生命周期事件以说明我的意思:
viewDidAppear - ViewController1
viewWillDisappear - ViewController1
viewDidAppear - ViewController2
viewDidAppear - ViewController3
viewWillDisappear - ViewController3
viewDidAppear - ViewController1
从上面的控制台打印语句中可以看出,ViewController2永远不会被破坏。从逻辑上讲,当VC3重新调回VC1时,我认为它会随着ViewController3一起被破坏。然而,事实并非如此,很可能是因为模态视图在Swift中的工作方式错综复杂。
我该如何解决这个问题?我需要VC2来调用viewWillDisappear
答案 0 :(得分:0)
我害怕你误解了塞格。从segue
ViewController3
到ViewController1
,您只需创建另一个ViewController1
的实例,其堆叠高于ViewController3
。你不会回去。
您应该使用UINavigationController
rootViewController
来ViewController1
。 segue
推送ViewController2
和modal
segue
到ViewController3
的按钮。
在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/