1

我有几个视图都由它们自己的控制器管理,其中一些是嵌套的。我想支持旋转,有些视图可以旋转到任何方向,有些只能旋转到纵向方向之一(正常或倒置)。

就我而言,我需要在我的 rootController 中实现 -shouldAutorotateToInterfaceOrientation 以允许任何子视图的旋转。问题是,rootController 不知道它是否应该允许旋转,因为它需要向子视图控制器询问这个问题。

在我的 rootController 的 -shouldAutorotateToInterfaceOrientation 中,我可以执行以下操作:

return [self.settingsController shouldAutorotateToInterfaceOrientation];

提供必要的轮换逻辑,但这是否是正确的方法?我确实阅读了苹果关于旋转的文档,但这并没有真正解决。

4

2 回答 2

1

为了将来参考,我将回答我自己的问题。

我的问题是我嵌套了 viewControllers 并且我通过调用类似的东西来显示子级别 viewController 的视图:

self.view = _subLevelViewController.view;

或者

[self.view addSubview:_subLevelViewController.view];

显然,像这样嵌套 viewController 并不是 Apple 想要你做的。

您应该坚持使用 1 个“根 viewController”,并且应该使用以下方法显示其他 viewController:

[self presentModalViewController:_subLevelViewController animated:YES];

有关该主题的更多信息和非常好的阅读: http:
//blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

于 2011-09-09T11:55:29.923 回答
0

我发现这篇文章和引用的博客是关于执行嵌套视图控制器的最简洁的指南。值得更新:

// "self" is the root view controller.
if ([self respondsToSelector:@selector(presentViewController:animated:completion:)])
    // The following is not available until iPhone 5.0:
    [self presentViewController:self.subViewController animated:YES completion:NULL];
else 
    // For iOS 4.3 and earlier, use this (deprecated in 5.0):
    [self presentModalViewController:self.subViewController animated:YES];

我在这里将其保留为空,但请注意,新方法允许您通过completion:参数发送内联函数。根据类 ref,它将在 subViewControllerviewDidAppear:运行后调用。

于 2012-03-22T23:42:38.923 回答