在任何地方都有记录介绍视图控制器之间的互动,包括展示/呈现视图控制器和父/子视图控制器吗?

3
阅读iOS中UIViewControllers的更改文档后,我试图弄清楚在自定义容器视图控制器内呈现模态视图控制器之间的交互方式。最终,我想要能够可靠地浏览一系列呈现的视图控制器,即使其中一些控制器是由子视图控制器呈现的。
(我正在开发一个库,而不是应用程序,因此我不会创建我将与之交互的层次结构。我只是试图确保我的库在不同类型的层次结构中可以正确工作。)
所以我的问题归结为,当有人尝试从子视图控制器呈现视图控制器时会发生什么?
[childViewController presentViewController:viewController animated:YES completion:nil];

由于一个呈现的视图控制器旨在“接管”交互直到被解雇,因此对我来说,将呈现请求转发给其父级(实际上是向上链传递parentViewControllers,直到达到没有parentViewController的视图控制器)并从该视图控制器中显示会很有意义。否则,似乎开发人员可以做出像从两个不同的子类呈现模态视图控制器等事情,这在我看来是有问题的。(例如,哪个呈现的视图控制器会优先?)
此外,如果上面的内容是真的,那么它似乎会有一些影响。如果父视图控制器正在显示一个已呈现的视图控制器,这会返回什么?
[childViewController presentedViewController];

因为父视图正在展示它,所以会是nil吗?还是这个请求可以转发到父视图,使得parentViewController及其childViewControllers都具有相同的结果?

无论如何,我已经准备好一个示例项目来运行一些场景,但我想知道是否有我错过的文档?或者是否已经有人知道这种交互发生的方式?

2个回答

2

我之前曾经做过一个容器视图控制器,发现默认实现会检查 parentViewController 是否存在,如果存在,则将消息传递给父视图控制器。

我没有找到任何相关文档,因此不能完全依赖这个特性。


你和我有着相同的经历。感谢反馈。 - Matthew Gillingham

1

这是一篇关于如何创建容器视图控制器的好文章,但不幸的是,它没有任何与我的问题相关的内容。从iOS 5开始,UIViewController有两组API,一组用于建立父子层级关系,另一组用于从另一个视图控制器中“呈现”一个视图控制器。我的问题涉及这两个API之间的交互。这篇博客文章只讨论了第一个主题,并且完全没有提到第二个主题。 - Matthew Gillingham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接