2

他に何をすべきですか?

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

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutoRotate
{
    return NO;
}

私のviewControllerはまだ回転しています。


これは、ナビゲーション スタックに組み込まれています。UINavigationController をサブクラス化し、そこに同じ縦向きのみのテンプレートを実装し、微調整した navigationController に viewController を埋め込むと、機能しますが、UINavigationController が表示されるすべての場所でコードを書き直すつもりはありません。

ここでのベストプラクティスは何ですか?

4

2 に答える 2

6

元の回答: サブクラス化する必要はありません - ここで私のソリューションで説明したようなカテゴリを実行するだけです: iOS6 シミュレーターでのトップホーム ボタンの縦方向の向きが機能しない

基本的に、iPhone の場合、UINavigationController は「上部のホーム ボタンのポートレート」を除くすべての回転を許可し、iPad の場合はすべてを許可します。

したがって、現在アクティブなView Controllerに決定を転送するカテゴリを実行するか、次のような静的なものを実行します

UINavigationController-Rotation.h:

@interface UINavigationController (Rotation)
@end

UINavigationController-Rotation.m:

#import "UINavigationController-Rotation.h"

@implementation UINavigationController (Rotation)

#pragma From UINavigationController

- (BOOL)shouldAutorotate {

    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;
}

#pragma -

@end

更新: Javier Soto が指摘したように、同じことを行う 2 番目のカテゴリがある場合、これは未定義の動作につながる可能性があります。その場合、サブクラス化がより良い解決策になる可能性があります。

同じことをしているカテゴリが他にないことを知っている状況では、これは機能し、労力が少なく、ローカルで実用的なソリューションであると私は考えています. 私はそれについて宗教的ではありません。自分で決めてください。

于 2012-10-18T12:49:57.757 に答える
3

UINavigationControllerどこでもカスタムのものを継承して使用する必要があります。たいした作業ではありません (コード内の の出現箇所を検索するだけUINavigationControllerです)。これにより、必要に応じて他のものをカスタマイズできるため、はるかに柔軟になります。

他の応答が示唆するように、メイン クラスのメソッドをオーバーライドするカテゴリでは絶対に行わないでください。

于 2013-07-11T20:23:36.853 に答える