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。通过 segue
从 ViewController3
到 ViewController1
,您只是在创建另一个堆叠在 ViewController3
之上的 ViewController1
实例。你回不去了。
你应该使用 UINavigationController
来保持你的 ViewController1
的 rootViewController
。 segue
推一个 ViewController2
和 modal
一个 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/
我无法弄清楚如何正确销毁 ViewController。在我的项目中,我有 3 个视图控制器。
第一个视图控制器转到第二个视图控制器。 第二个视图控制器模态地转到第三个视图。当第三个视图在屏幕上时,在背景中仍然可以看到第二个屏幕(第三个视图具有透明背景)。
但是,当我离开第三个视图控制器并返回到第一个视图控制器时,处于后台的第二个视图控制器没有被破坏。我记录了视图控制器生命周期事件来说明我的意思:
viewDidAppear - ViewController1
viewWillDisappear - ViewController1
viewDidAppear - ViewController2
viewDidAppear - ViewController3
viewWillDisappear - ViewController3
viewDidAppear - ViewController1
从上面的控制台打印语句可以看出,ViewController2 从未在任何地方被销毁。从逻辑上讲,我假设当 VC3 返回到 VC1 时,它会与 ViewController3 一起被销毁。然而,情况并非如此,很可能是由于模态视图在 Swift.
中的工作方式错综复杂我该如何解决这个问题?我需要 VC2 来调用 viewWillDisappear
恐怕你误解了segue。通过 segue
从 ViewController3
到 ViewController1
,您只是在创建另一个堆叠在 ViewController3
之上的 ViewController1
实例。你回不去了。
你应该使用 UINavigationController
来保持你的 ViewController1
的 rootViewController
。 segue
推一个 ViewController2
和 modal
一个 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/