【问题标题】:Call willrotate method for added subview controller为添加的子视图控制器调用 willrotate 方法
【发布时间】:2012-06-29 06:06:08
【问题描述】:

当我旋转设备时,我现在使用self.view add subview:secondview 将一个视图控制器作为子视图添加到我的第一个视图控制器中

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

方法只调用父视图 现在我还想为子视图控制器调用该方法,这样我也可以在子视图控制器中进行必要的更改。 那我该怎么办??

-提前致谢。

【问题讨论】:

  • secondView 是 UIViewController 还是只是 UIView 对象?
  • 我原以为你会想要pushViewControllerpresentViewControllerAnimatedaddChildViewController。不要尝试自己发送这些轮换事件,而是让 iOS 为您完成工作。
  • 顺便说一句,你说 secondview 是UIViewController。你确定你真的在使用视图控制器作为参数来 addSubview 吗?!?
  • 如果你检查addSubview documentation,你会发现你应该发送一个UIView而不是一个UIViewController。我很惊讶这完全有效。我很惊讶编译器没有抱怨(除非您使用id 类型的变量,这本身就是一个非常糟糕的主意)。

标签: iphone ios ipad ios5 uiinterfaceorientation


【解决方案1】:

在视图控制器包含的WWDC 2011 Session 102 中,他们提到未能保持视图控制器层次结构与视图层次结构同步可能会导致旋转事件问题。他们明确指出,如果您只是获取视图控制器的视图并将其添加为主视图的子视图,而不将控制器本身添加到视图控制器层次结构中,您将不会收到这些旋转事件。在 WWDC 会议中,他们还建议,如果您想“面向未来”您的应用程序,您需要正确管理视图控制器。

从实用的角度来看,这意味着当您从一个视图转到另一个视图时,您确实应该转换视图控制器。这通常意味着使用pushViewControllerpresentViewControllerAnimated(以前的presentModalViewController)。或者您可以使用视图控制器遏制(参见 WWDC 会议或查看UIViewController Class Reference 中关于遏制的非常简短的 cmets)。但不要只是从另一个视图控制器中获取视图并将其添加为当前视图的子视图。

如果您追求视图控制器包含,至少可以通过以下方式将子视图的控制器添加到层次结构中:

[self addChildViewController:childController];
[childController didMoveToParentViewController:self];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多