【问题标题】:Is Interaction Between Presented/Presenting View Controllers and Parent/Child View Controllers Documented Anywhere?呈现/呈现视图控制器和父/子视图控制器之间的交互是否记录在任何地方?
【发布时间】:2012-04-27 02:54:07
【问题描述】:

阅读有关 iOS 中 UIViewControllers 更改的文档,我试图弄清楚呈现模式视图控制器之间的交互如何在自定义容器视图控制器内部工作。最终,我希望能够可靠地遍历一系列呈现的视图控制器,即使其中一些控制器是由子视图控制器呈现的。

(我正在开发一个库,而不是应用程序,所以我没有创建我将与之交互的层次结构。我只是想确保我的库能够在不同类型的层次结构中正常工作。)

所以我的问题归结为,当有人试图从子视图控制器呈现视图控制器时会发生什么?

[childViewController presentViewController:viewController animated:YES completion:nil];

由于呈现的视图控制器旨在“接管”交互直到它被解除,对我来说呈现请求将被转发到它的父级(或者实际上,在 parentViewControllers 链上直到它到达一个没有 parentViewController 的视图控制器),然后从该视图控制器显示。否则,似乎开发人员可以做一些事情,比如从两个不同的孩子呈现模态视图控制器等,这在我看来是有问题的。 (例如,哪个呈现的视图控制器会优先?)。

此外,如果上述情况属实,它似乎会产生一些影响。如果父视图控制器正在显示呈现的视图控制器,这将返回什么?

[childViewController presentedViewController];

会不会是nil,因为父级正在显示它?或者是否可以将此请求转发给父级,以便parentViewController 及其任何childViewControllers 都具有相同的结果?

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

【问题讨论】:

    标签: ios uikit modalviewcontroller parentviewcontroller childviewcontroller


    【解决方案1】:

    不久前我在一个容器视图控制器上工作,发现默认实现会检查parentViewController 是否存在,如果存在,它会将消息传递给父级。

    我找不到任何关于它的文档,所以你不能 100% 依赖它。

    【讨论】:

    • 你和我的经历是一样的。感谢您的反馈。
    【解决方案2】:

    Dr.Touch 有一篇非常好的帖子:

    http://www.cocoanetics.com/2012/04/containing-viewcontrollers/

    如果您喜欢 View Controller Containers,这是一本必读的书

    【讨论】:

    • 这是一篇关于如何制作容器视图控制器的好帖子,但不幸的是,它没有任何与我的问题相关的内容。从 iOS 5 开始,UIViewController 有两组 api,一组用于设置父子层次结构,另一组用于“呈现”另一个视图控制器。我的问题与这两个 API 之间的交互有关。这篇博文只讨论了这些主题中的第一个,根本没有提到第二个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多