1

私はタブバーアプリケーションを持っています。そして最初のタブの項目はNavigation Controllerです。ナビゲーション コントローラーのスタックには 4 つのアイテムがあります。ローテーションを提供したい。しかし、タブバーアプリケーションではそれが問題です。そのため、独自のタブバーコントローラーを作成し、メソッドをオーバーライドします。

@interface RotatingTabBarController : UITabBarController

@end

@implementation RotatingTabBarController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    if([self.selectedViewController isKindOfClass:[UINavigationController class]]){
        BOOL f = [[(UINavigationController*)self.selectedViewController visibleViewController] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
        return f;
    } else {
        BOOL f = [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
        return f;
    }
}

@end

その後、適切な UIInterfaceOrientation サポートを提供すると、コントローラーは自動回転をサポートします。しかし、私のカスタム RotatingTabBarController がなければ、それは不可能に思えます

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

問題は次のとおりです。このビュー コントローラーの shouldAutorotateToInterfaceOrientation でナビゲーション コントローラーの FirstViewController をプッシュすると、縦向きのみが提供されますが、SecondViewController をプッシュすると (縦向きと横向きの両方を提供します)、SecondViewController の現在のインターフェイスの向きが横向きであり、押し戻す場合ボタン (SecondViewController がスタックからポップされ、FirstViewController が表示されます)、FirstViewController の向きはランドスケープです。しかし、shouldAutorotateToInterfaceOrientation メソッドでは、私は彼に縦向きのみを提供します。

4

2 に答える 2

3

実際には、UITabbarControllerクラスをサブクラス化しないでください。

UITabBarControllerクラスは、無線スタイルの選択インターフェイスを管理する特殊なビューコントローラを実装します。このクラスはサブクラス化を目的としていません。

UITabBarControllerクラスリファレンスから

コントローラを表示する場合はオーバーライド

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

方法、それは大丈夫なはずです。

一部のビューの横向きとアプリにないビューをサポートするのは良い考えではないと思います。

すでに理由がわかっていますが、横向きモードでユーザーが戻るボタンを押した場合はどうなりますか?

ここで何をすべきか、デバイスが横向きになっている間に回転して縦向きにしますか?

そうしたい場合、デバイスに向きを強制的に変更させる簡単な方法はありません。変換を使用して、ビューの方向を自分で処理する必要があります。

ナビゲーションコントローラーのスタック上にないモデルビューコントローラーを使用して、ビューのさまざまな方向をサポートする可能性があります。

于 2012-05-25T14:43:10.720 に答える
0

モーダルウィンドウを使用し、横向きで戻るボタンを非表示にしました。それは問題を解決しました。

于 2012-06-27T10:54:05.633 に答える