我的目标包括很多视图需要根据每个用户操作以模态方式呈现不同的视图。我想要做的是获得更清晰的视图层次结构和更好的用户体验。
- 根视图控制器以模态方式呈现第一个视图控制器
- 当我单击第一个视图控制器上的按钮时,第二个视图控制器会以模态方式出现在其上方。
- 一旦第二个视图控制器出现,我想从视图层次结构中消除或删除第一个视图控制器。
我可以这样做吗?If so,我该怎么办?
If not,解决这个问题的正确方法是什么,因为我将在每个视图上呈现许多模态呈现的视图控制器。我认为即使我想关闭当前视图,当当前视图关闭时,前一个视图仍然会出现。
UPDATE :
VC1(根)> VC 2(模态存在)> VC 3(模态存在)
在 VC 上模态呈现 2)
当我解雇时VC3
, the VC2
仍在查看内存中。所以我不想出现VC2
一旦我解雇VC3
相反我想看看VC1
通过删除或解雇VC2
从视图层次结构。
WANT:在图像中,当我消除蓝色时,我不想在视图内存中看到粉红色,并且我想在蓝色出现时立即将其删除。
这就是我想做的。
有帮助吗?谢谢。
因此,我们假设您有一个类似于以下内容的故事板:
应该发生的是:
- 呈现第二个 ViewController(来自第一个 ViewController)。
- 呈现第三个 ViewController(来自第二个 ViewController)。
- 解散到第一个 ViewController(从第三个 ViewController)。
在第三个 ViewController 按钮的操作中:
@IBAction func tapped(_ sender: Any) {
presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)
}
如您所见,通过访问呈现视图控制器当前 ViewController 的,您可以取消视图控制器的先前层次结构:
呈现此视图控制器的视图控制器。
通过实施presentingViewController?.presentingViewController?
这意味着:当前 ViewController 的呈现:)
这可能看起来有点令人困惑,但它非常简单。
所以输出应该是这样的(我向 viewController 添加了背景颜色 - 如 vc1:橙色、vc2:黑色和 vc3:浅橙色 - 以使其显示清晰):
EDIT:
如果您要求删除中间的 ViewController(在本例中是第二个 ViewController),解雇(动画:完成:)自动执行此操作:
如果您连续呈现多个视图控制器,从而构建一个
呈现的视图控制器堆栈,在视图上调用此方法
堆栈中较低的控制器会解除其直接子视图
控制器以及堆栈上该子级之上的所有视图控制器。
发生这种情况时,只有最顶层的视图会在动画中消失。
时尚;任何中间视图控制器都被简单地从
堆。最顶层的视图使用其模态转换被关闭
style,可能与其他视图控制器使用的样式不同
位于堆栈的较低位置。
参考你所问的内容:
我想即使我想驳回当前的观点,前一个观点也会
当当前的一个解雇时仍然保留出现。
我认为这在用户界面上清晰可见(而且我觉得还可以),但正如dismiss
文档讨论中,第三个和第二个都将从堆栈中删除。这是正确的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)