在模态呈现另一个视图控制器后视图控制器会发生啥

Posted

技术标签:

【中文标题】在模态呈现另一个视图控制器后视图控制器会发生啥【英文标题】:What happens to a View Controller after it has modally presented another View Controller在模态呈现另一个视图控制器后视图控制器会发生什么 【发布时间】:2017-01-05 15:53:35 【问题描述】:

考虑以下应用结构:

登录屏幕 --> 启动屏幕 --> 主要用途(--> 注销页面 --> 登录屏幕的新实例)

当用户从启动屏幕登录时,我会从登录屏幕模态显示启动屏幕。当启动画面完成它的任务时,我会从启动画面模态地呈现主要使用视图(这是一个UITabController)。如果在某个时候用户决定退出应用程序,我会删除凭据并从主使用视图模态显示登录屏幕的新实例。

我最近开始怀疑这是否能按我的预期工作。假设用户已经导航到 Main Use,呈现视图控制器(启动画面)和 呈现视图控制器(登录屏幕)是否仍然处于活动状态并出现在层次结构中?在模态地呈现另一个视图控制器之后,我希望第一个视图控制器完全卸载并被系统遗忘,就好像它被设置为空一样。有人可以证实这一点吗?如果这不能像我期望的那样工作,我应该怎么做而不是模态呈现视图控制器?

【问题讨论】:

【参考方案1】:

您的怀疑是有道理的。当您呈现模态视图控制器时,它会在现有视图控制器之上并覆盖它,但现有视图控制器不会消失。您永远不想在不关闭前一个视图控制器的情况下呈现视图控制器的新副本。 (使用dismiss(animated:completion:)。)

【讨论】:

这是否意味着正确的方法是在呈现下一个视图控制器后关闭当前的视图控制器? 不,在此之前,你不能在不关闭当前视图控制器的情况下关闭当前视图控制器。

以上是关于在模态呈现另一个视图控制器后视图控制器会发生啥的主要内容,如果未能解决你的问题,请参考以下文章

从 SubView 呈现模态 ViewController

关闭当前视图控制器时 UIView 框架发生变化

如何在模态呈现的视图控制器上执行呈现模态序列?

应用程序在模态显示视图控制器时崩溃

模态视图控制器优于呈现视图控制器

如何从模态视图控制器调用呈现视图控制器的方法