只要下一个模态显示,就会关闭或删除以前模态显示的视图控制器

Thi*_*ung 2 uiviewcontroller ios swift

我的目标包括很多视图需要根据每个用户操作以模态方式呈现不同的视图.这就是我想要做的更清晰的视图层次结构和更好的用户体验.

  1. Root View Controller以模态方式呈现First View Controller
  2. 当我单击第一视图控制器上的按钮时,第二视图控制器以模态方式显示在它上面.
  3. 第二个视图控制器出现后,我想从视图层次结构中解除或删除第一个视图控制器.

我能这样做吗?如果是这样,我该怎么办?

如果没有,解决这个问题的正确方法是什么,我将在每个视图上呈现许多模态呈现的视图控制器.我想即使我想要忽略当前的观点,前一个观点仍然会在当前观点被忽略时出现.

更新:

VC1(Root)> VC 2(模态存在)> VC 3( 在VC 2上以模态存在)

当我解雇时VC3,VC2仍然在查看记忆.因此,我不想在VC2我解雇后立即出现VC3,而是希望VC1通过删除或VC2从视图层次结构中删除来查看.

在此输入图像描述

想要:在图像上,当我解雇蓝色时,我不希望在我的视图记忆中看到粉红色,我想在蓝色出现后立即将其删除.

这就是我想要做的.

任何帮助?谢谢.

Ahm*_*d F 7

所以,我们假设你有一个类似于的故事板:

在此输入图像描述

应该发生的是:

  • 呈现第二个ViewController(来自第一个ViewController).
  • 呈现第三个ViewController(来自第二个ViewController).
  • 解雇第一个ViewController(来自第三个ViewController).

在第三个ViewController按钮的动作中:

@IBAction func tapped(_ sender: Any) {
    presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,通过访问presentingViewController当前视图控制器,你可以关闭该视图控制器以前的层次结构:

提供此视图控制器的视图控制器.

通过实现presentingViewController?.presentingViewController?这意味着:呈现当前的ViewController :)

这看起来有点混乱,但很简单.

所以输出应该是这样的(我为viewControllers添加了背景颜色-as vc1:orange,vc2:black和vc3:light orange-以使其显得清晰):

在此输入图像描述

编辑:

如果要求在中间删除ViewController(在本例中为第二个ViewController),则dismiss(animated:completion :)会自动执行此操作:

如果连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器.发生这种情况时,只有最顶层的视图以动画方式被删除; 任何中间视图控制器都可以从堆栈中删除.最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同.

参考你在问什么:

我想即使我想要忽略当前的观点,前一个观点仍然会在当前观点被忽略时出现.

我认为在UI上显而易见(我觉得没问题),但正如dismiss文档讨论中所提到的,第三个和第二个都将从堆栈中删除.这是正确的方式.