1

現在、タブバーコントローラーを使用する作業中のアプリに取り組んでいます。アプリは横向きモードにまったく回転しません-すべてのビューはbaseVieControllerから継承し、ここに実装しました:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return true;
}

これで、すべてのサブビューがビューが回転しようとしている方向をサポートしない限り、tabBarコントローラーは回転しないことがわかりました-私の質問はこれです:-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientationメソッドをすべてのサブビューに実装しない場合、これを目的の方向として指定しなくても、これらのサブビューをポートレートモードにロックしますか?したがって、tabBarコントローラー全体を縦向きにロックします。以前にも同様の質問があったことは知っていますが、この特定の質問に対する答えは見つかりませんでした。前もって感謝します。

4

3 に答える 3

4

ビューを回転させることができます。以下のようにオーバーライドする必要があります。回転するビューコントローラクラスにコードを追加するだけです(ここでは「SampleClassName」用です)。

@interface UITabBarController (rotation)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
@end


@implementation UITabBarController (rotation)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    if ([self.selectedViewController isKindOfClass:[UINavigationController class]])
    {
        UINavigationController *navController = (UINavigationController *) self.selectedViewController;
        if ([[navController visibleViewController] isKindOfClass:[SampleClassName class]])
            return YES;
    }
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
于 2012-08-08T10:10:16.767 に答える
1

ストーリーボードを使用してIOS5用に開発している場合、これは同じ問題が発生した場合に役立ちます。通常、ストーリーボードの前に、TabBarControllerをuiviewまたはappdelegateに追加します。ストーリーボードでは、ストーリーボードビューを必ずしもビューコントローラに接続する必要はありません。

これを修正するには

サブクラスフィールドタイプ UITabBarControllerに新しいクラスファイルobjective-cクラスを追加します

1-ストーリーボードでタブバーコントローラービューを選択します

2-カスタムクラスの下で、 UITabBarControllerを新しく作成したクラス名に変更します。私はMainTabBarViewControllerと呼びました。

3-新しく作成したクラスでこれを変更します

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
      return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
        if (interfaceOrientation == UIInterfaceOrientationPortrait)
            return YES;

        if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
            return YES;

        return NO;
}

基本的に何が起こっているのかというと、Interface Builderで構造を作成しているのですが、それは途中でしかできません。この場合でも、コンパニオンコードを作成する必要があります。私は.xibを使用して最初からビューを構築することに慣れており、通常はappdelegateからタブバーコントローラーを構成するため、これは最初は混乱しました。

また、このようにこれらのそれぞれを条件付きで制御することができます

if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    return NO;

if (interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    return NO;

if (interfaceOrientation == UIInterfaceOrientationPortrait)
    return YES;

if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    return YES;

必要なものについてはyesを返し、不要なものについてはnoを返します。またはすべてを受け入れるにはyesを返します。

于 2012-08-21T19:01:33.187 に答える
0

親ビューコントローラー(この場合は-baseViewController)がこのメソッドを実装している限り-

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return true;
}

すべての子ビューコントローラですべての方向をサポートするため、これを子ビューコントローラに実装する必要はありません。

于 2012-08-08T09:44:59.900 に答える