2013-10-26 12 views
12

私のアプリは自動回転することができますが、ポートレートモードでのみ表示するにはビューの1つが必要で、これを実現する方法がわかりません。 私は(他のものの間で)これを試みたが、問題のビューはまだ回転:あなたはあなたのビューコントローラは、モーダルビューコントローラとして提示した場合1つのView Controller ios7の自動回転を防止しますか?

-(BOOL)shouldAutorotate 
{    
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

答えて

6

supportedInterfaceOrientationsが動作します。ナビゲーションコントローラースタックの一部として表示すると機能しません。あなたのビューをモーダルに表示したいがナビゲーション・コントローラー(例えばナビゲーション・アイテムを持つ)の中に入れたい場合は、UINavigationControllerをサブクラス化し、サブクラスのsupportedInterfaceOrientationsメソッドをオーバーライドする必要があります。

+0

解決策を示すコードを追加することは可能でしょうか? – rkh

+0

@rkh 1つの関数をオーバーライドするサブクラスを作成するコードが必要ですか? –

+0

いいえ、彼は新しいユーザーのように思われるので、私はあなたのソリューションを「コード」で説明するつもりでした...私はいいです:) – rkh

15

このソリューションでは、個々のビューコントローラの方向をコントロールする方法について説明します(ナビゲーションコントローラで管理されている場合)。

Xcode 5では、 "Objective-C category"という新しいファイルを作成し、 "Category"を "rotation"に設定し、 "UINavigationController"を "Category on"として選択します。次のコードを記述し、.mファイルで UINavigationController + rotation.h UINavigationController + rotation.m

新しいファイルのカップルは、次の名前を持つ、プロジェクト内に表示されます

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

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

このようにして、ナビゲーションコントローラは現在のトップビューコントローラに方向ポリシーを決定させる。

次に、ナビゲーションコントローラによって管理される特定のビューコントローラで、2つの方向関連メソッドをオーバーライドできます。例えば

、特定のビューコントローラのみ縦向きに表示されるものとします。

- (BOOL) shouldAutorotate 
{    
    return NO; 
} 

- (NSUInteger) supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

は、所望の向きが、プロジェクトの展開先に設定されたものの一つであることを確認してください。 これは十分詳細であり、助けになると思います。

+0

完璧に動作します - ありがとう! – wayneh

+0

偉大な答えは、それは本当に素晴らしい作品です! – EridB

関連する問題