0

Navigation ControllerのルートView ControllerとしてUIViewController Aを持つiPadアプリがあります。ViewController Aのサブビューとして、さらに3つのView Controller B、C、Dがあります。

C と D はオリエンテーションに応答する必要がありますが、B にはオリエンテーションに応答しないようにします。

現在、コードを使用すると、それらのすべてが向きの変更に対応します。

2 つの別個のルート ViewController を作成し、それらを Windows ビューに追加するという別の回答がありました。そのうちの 1 つは回転せず、その他は回転します。ViewController Aにヘッダーがあり、B、C、Dを切り替えてviewControllerの前面にするため、それはできません。

とにかく提案してください。

ありがとう

4

2 に答える 2

1

このように UINavigationController をサブクラス化する必要があります。

.H

#import <UIKit/UIKit.h>

@interface UINavigationController (Rotation)

- (BOOL)shouldAutorotate;
- (NSUInteger)supportedInterfaceOrientations;

@end

.M

#import "UINavigationController+Rotation.h"

@implementation UINavigationController (Rotation)

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    if ([self visibleViewController] && [[self visibleViewController] isKindOfClass:[B class]]) {
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait;
}

@end
于 2013-08-12T11:25:29.740 に答える
0

UINavigationController からサブクラスを作成するか、そのカテゴリを作成できます。そして、このメソッドを実装します:

-(BOOL)shouldAutorotate
{
    return [self.topViewController shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.topViewController preferredInterfaceOrientationForPresentation]; 
}

次に、コントローラーで、必要な方向でこのメソッドを実装する必要があります。

于 2013-08-12T12:34:49.950 に答える