了解addChildViewController的使用

我正在处理一些我需要重构的代码。 视图控制器充当另外两个视图控制器的容器,并将在它们之间进行交换,如下面的代码所示。

这可能不是最好的devise。 以这种方式交换视图控制器可能不是必需的。 我明白那个。 但是,当我使用这段代码时,我想进一步理解addChildViewController调用会发生什么。 在苹果的文档或相关问题中,我一直无法find答案(可能表明devise需要改变)。

具体来说 – 容器视图控制器如何处理要求添加子视图控制器的情况? 它是否认识到它已经添加了视图控制器对象?

例如,如果下面的代码是在一个方法 – 这种方法被称为两次…

[self addChildViewController:viewControllerB]; [self.view addSubview:viewControllerB.view]; [viewControllerB didMoveToParentViewController:self]; [viewControllerA willMoveToParentViewController:nil]; [viewControllerA.view removeFromSuperview]; [viewControllerA removeFromParentViewController]; 

谢谢,加文

一般情况下, 他们的视图控制器“包容”的指导原则应当遵循,以确定是否需要实施包容。

特别是,担心两次添加相同的子视图控制器就像担心两次呈现相同的视图控制器一样。 如果你真的想过,你不应该面对这个问题。 你的直觉是正确的。

我同意苹果公司的文档应该更多地关于奇怪的参数会发生什么,或者什么时候按顺序调用,但是也可能是一个不希望将自己与错误纠正devise联系起来,导致麻烦的道路。 当你制定出一个不会以错误的方式调用这些方法的devise时,你可以正确地解决这个问题,使自己独立于任何可能或不可能有的错误修正 – 如果你考虑到这一点,更重要的是,logging在案,错误更正可能会在未来工作不同,打破你的应用程序。

再进一步,你会注意到,苹果的容器视图控制器不能进入无效状态(至less不容易与公共API)。 使用UITabViewController ,从一个视图控制器切换到另一个视图控制器是一个primefaces操作,并在任何时间点的标签视图控制器知道到底发生了什么。 要做的最多的是去除活动的一个,并显示新的。 唯一一次把水从水里吹出来的时候,就是当你告诉它“你应该把所有的东西都冲出水面,并开始使用这些视图控制器”。

对其他任何东西进行编码,例如删除所有视图或所有视图控制器,而不pipe在某些情况下可能看起来是合适的还是健壮的,但实际上相反,因为实际上代码的一端不会相信代码的另一端其交易的一部分。 在任何情况下,这实际上对你有帮助,这意味着你已经让人们无视你所期望的控制,而无视你的视图控制器,在这种情况下, 这就是你应该解决的问题。