1

これまでのところ、自分の状況に対応するものは見つかりませんでした...

参考までに、ストーリーボードを使用してiOS5用に開発しています。

2つのビューを持つタブバーコントローラーがあります(タブ1とタブ2と呼びましょう)。また、アプリケーションの使用中にデバイスが回転するたびに使用されるタブバーのない別の横向きのビューもあります。このビューとの間で切り替えるには、手動で起動したセグエを使用します。また、横向きのビューでNSStringを使用して、どのタブから来ているのかを確認し、縦向きに戻ったときにタブを修正します。これまでのところ、これは正常に機能します。ランドスケープモードに出入りすることができます。shouldAutorotateToInterfaceOrientation

私の問題は:

アプリを起動すると、縦向きでタブバーが表示されます。風景に行くと消えてしまいます。これは問題ありません。ストーリーボードで行ったことです。しかし、ポートレートに戻ると、タブバーが戻りません。それが問題です。

編集:ローテーションを呼び出すコード

shouldAutorotateToInterfaceOrientationカスタムセグエと競合していたため、回転の使用を停止しました。タブバーの問題は以前ここにあったので、これは問題ではありません。代わりに使用didRotateします。

これがからのコードですFirstViewController.m(同じコードでSecondViewController.m、私のセグエ識別子を変更します):

-(void)didRotate:(NSNotification *)notification
{ 
    UIInterfaceOrientation newOrientation =  [[UIDevice currentDevice] orientation];
    if ((newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight)) 
    {
        [self performSegueWithIdentifier: @"Page1ToLandscapeSegue" sender: self];
    }
}

そしてfrom LandscapeViewController.mpreviousViewはNSStringであり、横向きになる前に設定されているので、どのビューから来ているのかがわかります):

-(void)didRotate:(NSNotification *)notification
{ 
    UIInterfaceOrientation newOrientation =  [[UIDevice currentDevice] orientation];
    if (newOrientation == UIInterfaceOrientationPortrait)
    {
        if ([previousView isEqualToString: @"View1"]) {
            [self performSegueWithIdentifier: @"LandscapeToPage1Segue" 
                                      sender: self];
        }

        else if ([previousView isEqualToString: @"View2"]) {
            [self performSegueWithIdentifier: @"LandscapeToPage2Segue" 
                                      sender: self];
        }
    }
}
4

1 に答える 1

3

コメントを見ると、タブバーコントローラー(これは横向きのビュービューコントローラー)に埋め込まれていないビューコントローラーから接続しているため、タブバーが消えていると思います。次のことをお勧めします。

1)ビュー/コントローラーをさらに作成してスタックに追加することは言うまでもなく、前のビューに戻るようにセグエを設定するのは複雑に思えるので、元のビューに戻るセグエを破棄します。

2)ランドスケープビューへのセグエをモーダルにします。そうすると、セグエにセグエしたときにタブバーが表示されなくなります。プッシュを使用すると、タブバーコントローラーに埋め込まれます。

3)ランドスケープビューはモーダルビューになるため、ランドスケープビューコントローラーの回転コードでこのメソッドを呼び出すだけです。

[[self presentingViewController] dismissModalViewControllerAnimated:YES];

これにより、ビューがスタックからプッシュされ、元のビューに戻ります。

于 2012-09-03T15:52:51.960 に答える