1

私は階層に3つ持っていUIViewControllersますUINavigationController

最後の 1 つだけでランドスケープ モードを有効にするにはどうすればよいですか? (または、1 番目と 2 番目のブロックの風景)。

(1st > 2nd > 3rd を押してそれぞれ開きます)

これらのメソッドで UINavigationController をオーバーライドしようとしました:

-(NSUInteger)supportedInterfaceOrientations {
    UIViewController *top = self.topViewController;

    if ([top isMemberOfClass:[PictureViewController class]]) {
        return UIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
    } else {
        return UIInterfaceOrientationPortrait;
    }
}

-(BOOL)shouldAutorotate {
    UIViewController *top = (UIViewController*) self.topViewController;

    if ([top isMemberOfClass:[PictureViewController class]]) {
        return YES;
    } else {
        return NO;
    }
}

PictureViewControllerは3番目UIViewControllerです。それをshouldAutorotate返して返すYESsupportedInterfaceOrientationsUIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;

ただし、ランドスケープは有効になっていません。

4

1 に答える 1

0

このチェックでよろしいですか

if ([top isMemberOfClass:[PictureViewController class]]) {
    return UIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
} else {
    return UIInterfaceOrientationPortrait;
}

正しく動作していますか?

ビュー コントローラーとナビゲーション コントローラーでオーバーライド メソッド -(BOOL)shouldAutorotate および -(NSUInteger)supportedInterfaceOrientations を試して、このメソッドのみを呼び出してください。

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

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

また、ユーザー Pavan Saberjack が気付いたように、プロジェクトの plist でサポートされている向きを確認してください。

于 2013-08-28T06:51:44.007 に答える