我有几个视图都由他们自己的控制器管理,其中一些是嵌套的。 我想支持旋转,一些视图可以旋转到任何方向,有些只允许纵向方向(正常或上下颠倒)。
在我的情况下,我需要在rootController中实现-shouldAutorotateToInterfaceOrientation以允许任何子视图的旋转。问题是,rootController不知道它是否应该允许旋转,因为它需要向子视图控制器询问。
在我的rootController中-shouldAutorotateToInterfaceOrientation我可以这样做:
return [self.settingsController shouldAutorotateToInterfaceOrientation];
提供必要的旋转逻辑,但这是正确的方法吗? 我确实读过apple's doc about rotation,但这并没有真正得到解决。
答案 0 :(得分:1)
为了将来的参考,我会回答我自己的问题。
我的问题是我有嵌套的viewControllers,我通过调用类似的方式显示了子级viewController的视图:
self.view = _subLevelViewController.view;
或
[self.view addSubview:_subLevelViewController.view];
显然,像这样嵌套viewController并不是Apple想要你做的事情。
你应该坚持使用1“root viewController”,你应该使用以下方法显示其他viewControllers:
[self presentModalViewController:_subLevelViewController animated:YES];
有关该主题的更多信息和非常好的阅读:
http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/
答案 1 :(得分: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];
我在此处将其保留为null,但请注意,新方法允许您通过completion:
参数发送内联函数。根据类ref,它将在subViewController的viewDidAppear:
运行后调用。