2

我正在向我的视图添加一个子视图。一切正常。我的应用程序支持自动旋转。当我旋转我的设备时,我的父视图 shouldautorotate/willanimate 被调用,但子视图 shouldautorotate/willanimate 没有被调用。因此,我无法设置子视图的 UI 组件的位置。

viewController = [[abcController alloc] initWithNibName:@"abcController" bundle:nil];
[self.view addSubview:viewController.view];

任何指针都会有所帮助。

4

3 回答 3

3

那是因为您不能在功能上将视图从一个视图控制器添加到另一个视图控制器的视图树中,并期望第二个视图控制器获取消息。

你需要要么

  1. 让您添加的视图成为您的第一个UIViewController(而不是第二个UIViewController)的一部分
  2. 使用这些addChildViewController方法将第二个视图控制器添加为第一个视图控制器的子级(这将允许转发这些消息)。
于 2013-01-08T14:35:02.317 回答
1

您的视图缺少正确的自动调整大小设置:

viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

除此之外,如果您的意思是您abcController的 'sshouldautorotate/willanimate没有被调用,那是正常行为。

您的主控制器应该实现某种包含逻辑并将其转发shouldautorotate/willanimate给您的控制器。即,您的主控制器可以调用shouldautorotate/willanimate您的abcController实例,但它应该知道它。顺便说一句,Apple 不建议这样做,但如果您想支持 iOS4,这是唯一的方法。

或者,您可以使用UIViewController Containment for iOS>5。

这诉诸于使用两种方法:

@interface UIViewController (UIContainerViewControllerProtectedMethods)

 - (void)addChildViewController:(UIViewController *)childController;
 - (void)removeFromParentViewController;

@end

在这里你可以找到一个很好的教程。这不适用于 iOS4。

于 2013-01-08T14:32:04.280 回答
0

为了让视图控制器接收 shouldautorotate/willanimate 调用,您需要它位于“视图层次结构”中。因此,如果您只是将其视图添加为子视图,这些方法将不会被调用,但是如果您将此视图控制器推送到导航控制器或将其呈现为模式视图控制器或使用 addChildViewController 方法(适用于 iOS 5+),视图控制器将收到这些消息。如果您只想将其视图添加为子视图,则可以使用 autoresizingMask。(但是我只是没有看到创建视图控制器的意义,而不仅仅是自定义视图)

于 2013-01-08T14:38:00.210 回答