多视图控制器不同的自动旋转要求

问题描述:

我有几个视图都由他们自己的控制器管理,其中一些嵌套。 我想支持旋转,一些视图可以旋转到任何方向,有些只能旋转到其中一个纵向(正常或颠倒)。多视图控制器不同的自动旋转要求

在我的情况下,我需要在我的rootController中实现-shouldAutorotateToInterfaceOrientation以允许任何子视图旋转。问题是,rootController不知道它是否应该允许旋转,因为它需要问这到子视图控制器。

在我rootController的-shouldAutorotateToInterfaceOrientation我可以这样做:

return [self.settingsController shouldAutorotateToInterfaceOrientation]; 

提供旋转必要的逻辑,但是这会不会做这种正确的方法是什么? 我的确读过apple's doc about rotation,但这并没有被真正的好评。

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

我的问题是,我已经嵌套viewControllers和我通过调用像显示的子级的viewController的观点:

self.view = _subLevelViewController.view; 

[self.view addSubview:_subLevelViewController.view]; 

显然,这样的嵌套的viewController不是苹果想让你做什么。

你应该1“根的viewController”坚持,​​你应该使用类似的方法显示其他viewControllers:

[self presentModalViewController:_subLevelViewController animated:YES]; 

关于这个问题的更多信息和一个非常良好的阅读:
http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

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

// "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: PARAM发送一个内联函数。根据类ref,它将在subViewController的viewDidAppear:运行后调用。