在关于视图控制器包含的WWDC 2011 Session 102中,他们提到未能使视图控制器层次结构与视图层次结构保持同步可能会导致旋转事件问题。他们明确指出,如果您只是抓取视图控制器的视图并将其添加为主视图的子视图,而不将控制器本身添加到视图控制器层次结构中,您将不会收到这些旋转事件。在那个 WWDC 会议中,他们还建议,如果您想“面向未来”您的应用程序,您需要正确管理视图控制器。
从实用的角度来看,这意味着当您从一个视图转到另一个视图时,您确实应该转换视图控制器。最常见的是这意味着使用pushViewController
或presentViewControllerAnimated
(以前presentModalViewController
)。或者您可以使用视图控制器包含(请参阅 WWDC 会话或查看UIViewController 类参考中关于包含的非常简短的评论)。但不要只是从另一个视图控制器中获取视图并将其添加为当前视图的子视图。
如果您追求视图控制器包含,至少可以通过以下方式将子视图的控制器添加到层次结构中:
[self addChildViewController:childController];
[childController didMoveToParentViewController:self];