在iOS6中将shouldAutorotate
传播到深modal viewcontroller
的正确方法是什么
考虑以下示例:
Tabbed Application
Summary
中,选择所有方向 创建一个新的简单UITabBarController
,例如MyTabBarViewController
并添加代码
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
在AppDelegate中,将UITabBarController
替换为MyTabBarViewController
以挂钩轮播
self.tabBarController = [[MyTabBarViewController alloc] init];
现在旋转应该有效,并在FirstViewController
中添加代码,以便在点击时显示模态 viewcontroller
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UIViewController * viewController2 = [[SecondViewController alloc]
initWithNibName:@"SecondViewController_iPhone" bundle:nil];
[self presentViewController: [[UINavigationController alloc]
initWithRootViewController:viewController2]
animated:YES
completion:nil];
}
问题:
现在由于SecondViewController
被UINavigationController
包裹,即使我在SecondViewController中添加了shouldAutorotate
,也无法正确完成颠倒旋转。
唯一的解决方法是创建自定义UINavigationController
并实施shouldAutorotate
,这应该可行。
但这种方法听起来很愚蠢,它需要我通过实现shouldAutorotate
修复所有UI类,我不能再使用[UINavigationController alloc]
initWithRootViewController...
这样的缩写,我必须实现所有这些UITabBarController
和UINavigationController
。
有没有更好的方法?
答案 0 :(得分:0)
这不是愚蠢的,而且似乎是正确的方式。
您可以创建UINavigationController的子类,并使用
[[MyNavigationController alloc] initWithRootViewController:...]
。
答案 1 :(得分:0)
你试过这个:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
这是设备发送的通知,告知观察者旋转。当你不再需要时,别忘了删除Observer