iOS6shouldAutorotate
の奥深くに伝播する正しい方法は何ですかmodal viewcontroller
次の例を考えてみましょう。
Tabbed Application
XCode4.5で新しいサンプルを作成します- で、すべての方向
Summary
を選択します 新しいシンプルなものを作成します
UITabBarController
。たとえばMyTabBarViewController
、コードを追加します- (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; }
AppDelegateで、回転をフックするために
UITabBarController
で置き換えますMyTabBarViewController
self.tabBarController = [[MyTabBarViewController alloc] init];
これで回転が機能するはずです。で、クリック時にモーダル
FirstViewController
ビューコントローラーを表示するコードを追加します-(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
がでラップされているため、SecondViewControllerUINavigationController
を追加shouldAutorotate
したとしても、逆さまの回転を正しく行うことができません。
唯一の修正は、カスタムを作成してUINavigationController
実装することshouldAutorotate
であり、これは機能するはずです。
しかし、このアプローチはばかげているように聞こえ、実装してすべてのUIクラスを修正する必要があり、shouldAutorotate
などの省略形を使用できなくなります。[UINavigationController alloc]
initWithRootViewController...
これらすべてUITabBarController
とを実装する必要がありUINavigationController
ます。
より良いアプローチはありますか?