0

ストーリーボード付きの iOS アプリケーションがあります。最後のビューコントローラーを常に縦向きモードのままにしたい。私は読んでいて、それ以来それを見つけました

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

非推奨です。次のような他の方法を使用する必要があります

-(BOOL)shouldAutorotate  
-(NSInteger)supportedInterfaceOrientations
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

しかし、私はこの方法の非常に多くの組み合わせを試しましたが、それを行うことができませんでした. 誰かが私に正しい方法を教えてください。

4

3 に答える 3

5

UIViewController は UINavigationController に埋め込まれているため、自分で呼び出しを転送しない限り、呼び出されることはありません。(私の意見では、UINavigationController に少し欠陥があります)

次のように UINavigationController をサブクラス化します。

@interface RotationAwareNavigationController : UINavigationController

@end

@implementation RotationAwareNavigationController

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

-(BOOL)shouldAutorotate {
    UIViewController *top = self.topViewController;
    return [top shouldAutorotate];
}

@end
于 2013-05-23T18:23:04.537 に答える
1

AppDelegate で:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown;

    if(self.window.rootViewController) {
        UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
        orientations = [presentedViewController supportedInterfaceOrientations];
    }

    return orientations;
}

あなたのViewControllerで:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
于 2014-05-15T10:03:07.840 に答える
1

他の UIViewControllers (つまり UINavigationController または UITabBarController) 内に UIViewControllers がある場合、これらのメッセージを、この動作を実装する子オブジェクトにプロキシする必要があります。

ビュー コントローラーがクエリされていることを確認するために、実装にブレークポイントを設定しましたか?

于 2013-05-23T18:12:28.780 に答える