gpt4 book ai didi

objective-c - 了解 addChildViewController 的使用

转载 作者:可可西里 更新时间:2023-11-01 03:10:28 24 4
gpt4 key购买 nike

我正在处理一些需要重构的代码。一个 View Controller 充当两个其他 View Controller 的容器,并将在它们之间交换,如下面的代码所示。

这可能不是最好的设计。可能不需要以这种方式交换 View Controller 。我明白那个。但是,当我使用这段代码时,我想进一步了解 addChildViewController 调用会发生什么。我无法在此处的 Apple 文档或相关问题中找到答案(可能表明设计需要更改)。

具体来说——容器 View Controller 如何处理要求添加它已经添加的 subview Controller 的情况?它是否认识到它已经添加了该 View Controller 对象?

例如如果下面的代码在一个方法中 - 并且该方法被调用了两次...

[self addChildViewController:viewControllerB];
[self.view addSubview:viewControllerB.view];
[viewControllerB didMoveToParentViewController:self];

[viewControllerA willMoveToParentViewController:nil];
[viewControllerA.view removeFromSuperview];
[viewControllerA removeFromParentViewController];

谢谢,加文

最佳答案

一般来说,their guidelines for view controller "containment" ,当一个包含另一个时,应遵循以确定您是否需要实现遏制。

特别是,担心两次添加相同的 subview Controller 就像担心两次呈现相同的 View Controller 一样。如果你真的把事情想通了,你应该不需要面对那个问题。你的直觉是正确的。

我同意 Apple 的文档应该更直接地说明奇怪的参数或乱序调用时会发生什么,但也可能是不想将自己束缚在会引起麻烦的纠错设计上在路上。当你设计出一个永远不会以错误的方式调用这些方法的设计时,你就正确地解决了问题,并使自己独立于它们可能有或没有的任何纠错——如果你考虑到这一点就更重要了,因为它不是记录在案,错误更正在未来可能会以不同的方式工作,从而破坏您的应用程序。

更进一步,您会注意到 Apple 的容器 View Controller 无法进入无效状态(至少使用公共(public) API 不容易)。使用 UITabViewController,从一个 View Controller 切换到另一个 View Controller 是一个原子操作,并且选项卡 View Controller 在任何时间点都知道发生了什么。它最多要做的就是删除事件的并显示新的。只有当你告诉它“你应该把所有东西都从水里吹出来,然后开始使用这些 View Controller ”时,它才会把所有东西都扔掉。

为其他任何事情编写代码,例如删除所有 View 或所有 View Controller ,无论在某些情况下看起来是权宜之计还是健壮的,但实际上恰恰相反你的代码的一端不信任你的代码的另一端来保持它的一部分交易。在任何实际帮助您的情况下,这意味着您让人们随意添加 View Controller 而没有您应该想要的控制,在这种情况下,这就是您应该解决的问题。

关于objective-c - 了解 addChildViewController 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12685907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com