2011-08-27 6 views
1

UISplitViewControllerに回転の問題があります。私の場合、別のビューを表示するためにsplitViewController(このsplitViewControllerはウィンドウのルートビューです)で現在のモーダルを呼び出した後です。そのモーダルビューが回転すると、SplitViewは正しく回転しません。iPadのUISplitViewControllerは、modalViewが回転してもうまく回転しませんでした

splitビューは回転しているように見えますが、DetailViewControllerはそのままポートレートに表示され、RootViewControllerはまったく表示されませんでした。ポートレートモードのように動作します。 SplitViewは回転しているが、基になるビュー(DetailViewControllerRootViewController)は回転していないようだ。

私はwillRotateToInterfaceOrientationをmodalViewに実装しようとし、代理人を使ってsplitViewのwillRotateToInterfaceOrientationメソッドを呼び出します。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    MacProjectAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    [delegate.splitViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
} 

結果は、DetailViewControllerが正しく動作ではなく、RootViewControllerと:これは私がmodalViewに実装するものです

。それは隠されたままです。これは、ユーザーが手動でポートレートに戻って横に戻った後に再び表示されます。しかし、明らかにユーザーはそれを望んでいませんでした。

これは私がmodalView提示したときに何をしたかである。この場合、RootViewControllerを表示する方法は

ModalViewController *modalView = [[ModalViewController alloc] init]; 
MacProjectAppDelegate *delegate = (MacProjectAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[delegate.splitViewController presentModalViewController:modalView animated:YES]; 
[modalView release]; 

ありますか?それとも私のやり方が間違っているのですか?

編集: すべてのビューがmodalViewに続いて回転しなかったようです。 RootViewControllerもDetailViewControllerも回転しませんでした(両方のViewControllerでthe didRotateFromOrientationが呼び出されていません)。だから私はそれがデバイス/ modalViewに続いて回転しなかったと仮定します。

+0

UISplitViewからではなく、 'DetailViewController'からmodalViewControllerを表示しようとしましたか? –

+0

私はそれを試して、それが動作していない。これまで私が試した解決策は 'appDelegate'を取得し、' willRotateToInterfaceOrientation'を2回呼び出す 'splitViewController'を取得することです。 1つは 'modalView'の' willRotateToInterfaceOrientation'メソッドで、もう1つは 'RootViewController'の' willAppear'メソッドです。 しかし、この方法にはまだ問題があります。 'DetailViewController'はポートレートモードのときと同じようにナビゲータボタンを表示します。私はまだこれに取り組んでいます。 – Kurotsuki

+0

私は同じ問題を抱えています。ここで私の解決策を見てhttp://stackoverflow.com/questions/7767302/how-to-inform-the-parent-viewcontroller-about-thechanged-screen-orientation-in/10623628#10623628 – HammerSlavik

答えて

1

OK。私の問題は解決されました。 Shurakovのコメントにコメントとして書きました。

私はappDelegateを取得し、splitViewControllerを取得してwillRotateToInterfaceOrientationを呼び出します。

MacProjectAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.splitViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 

私は2回しか行っていませんでした。 1つはmodalViewControllerwillRotateToInterfaceOrientationの方法で、1つはRootViewControllerwillAppearの方法です。 DetailViewControllerのナビゲーター/ポップオーバーボタンを削除するには

、私は単にRootViewControllerwillAppear方法でinvalidateRootPopoverButtonItemを呼び出すことによって、そのボタンを無効にします。これは私が私の問題を克服した人を助ける方法を説明することができます

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
if (UIInterfaceOrientationIsLandscape(orientation)) { 
    MacProjectAppDelegate *delegate = (MacProjectAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate.splitViewController willRotateToInterfaceOrientation:orientation duration:1]; 
    [[[delegate.splitViewController viewControllers] objectAtIndex:1] invalidateRootPopoverButtonItem:self.rootPopoverButtonItem];   
} 

希望:この特定の方法(modalViewControllerで最初のもののために、私はちょうどsplitViewControllerwillRotateToOrientationコマンドを渡す)上のように見えているものです私と同じ問題。