究竟是什么意志移动到一个明确的控件:和didMoveToParentViewController:做什么?

时间:2012-10-16 07:43:34

标签: objective-c ios uiviewcontroller pushviewcontroller

我知道从iOS5和新的UIViewController包含方法开始,您应该将这些方法与 addChildViewController: removeFromParentViewController:和转换方法一起调用。我也知道在三种情况下调用它们的正确顺序。我不知道这些方法到底是做什么的?

如果这些只是UIViewController子类的覆盖点,我想我们在覆盖时不需要调用 super 。如果在删除视图控制器或 didMoveToParentViewController:self 之前没有调用 willMoveToParentViewController:nil ,会出现什么/将会出错?

2 个答案:

答案 0 :(得分:13)

除了已经说过的内容之外,他们还会调用一些委托方法:

addChildViewController来电[child willMoveToParentViewController:self]

removeFromParentViewController:来电[child didMoveToParentViewController:nil]

此外,他们还修改了childViewControllers属性,该属性包含一组子视图控制器。

答案 1 :(得分:1)

有很多答案:

  1. 他们在那里你应该在适用的地方打电话给他们,以便始终坚持这种模式。这样,如果您将超类从UIViewController更改为您自己的视图控制器,您就不必担心整个模式的位置。

  2. 他们是更好的地方,而不是告诉所有人覆盖addChildViewController:。正如您所说,错误管理willMoveToParentViewController:听起来比错误管理addChildViewController:更不危险,特别是如果您忘记拨打super

  3. UIViewController可能取决于你坚持这种模式。如果它知道它已经收到addChildViewController:但是从未得到其他两条消息,它可能会认为状态不一致。这是因为UIViewController做书记以引诱你坚持完整模式,还是你真的搞砸了它的内部状态,这是一个有趣的猜谜游戏,但也可能在任何iOS版本中发生变化。事情可能会严重破坏。这就是为什么这种模式存在的原因,因为Apple告诉你,只要你这样做,无论如何我们都会保持工作。

  4. 质疑模式是好的,但是尝试削减模式与骨骼的一致性会产生许多潜在的负面影响。除非模式涉及到荒谬,否则通常更容易符合它。

相关问题