1

私はiOS5に取り組んでおり、ストーリーボード、セグエー、さまざまな方向のビューを調整するのに苦労しています。過去数日間のアップルの援助を受けた後、私は答えを見つける場所が1つもないので、私は非常に注意深く明言し、次の結論に至りました。私は正しいかどうか誰かに教えてください。さまざまな向きのストーリーボード、エッジ、さまざまなビュー

1-ストーリーボードの使用は、セグを使用してください(これは初心者のための混乱です)。

2ナビゲーションコントローラに属するVCの間でのみセグを使用できます。

3一方、ナビゲーションコントローラを持っていても、あるVCから別のVCへのセグを使用する必要があるとは限りません。したがって、1つのVCから別のVCに移動しようとしている場合(最初のVCがNav Controllerに属しているかどうかにかかわらず)、次の操作を実行できます。

WhiteVCクラスとYellowVCクラスがあり、 WhiteVCビュー(ストーリーボード内にボタンを置き、汎用VCのクラスをWhiteVCに変更)をWhiteVCクラスのIBActionにリンクしました。

-(IBAction)GoToYellow 
{ 
    YellowViewController *YellowVC=[self.storyboard instantiateViewControllerWithIdentifier:@"myYellowVC"];            
    [self presentViewController:YellowVC animated:YES completion:nil]; 
} 

をWhiteVCにYellowVCから戻るには、あなたはその後、別のボタンを作成します。これは、表示されるボタンをクリックして、YellowVCビューを持つことができるように、WhiteVC.mに、あなたが実装するコードになりますこれはYellowVCを閉じ、ホワイトVCに戻ります

-(IBAction)ReturnToWhiteVC 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

:YellowVCビュー上(上記と同じプロセスに従う)し、次のコードを使用します。

4-複数のビューを所有するVCを(インスタンス化する)ようにすることはお勧めできません。たとえば、異なる向きでは、ビューごとに別々のVCを作成する方がよいでしょう。 VCがMVCの一部として他のVCをインスタンス化するようにしても構いません。

5 Nav Controllerを搭載したアプリケーションを作成していたが、そのルートVCがランドスケープであるかポートレートであるかによって、ルートVCが異なる(ビューが異なる別々のVC)ため、すべてのことが起こった。だから、私はVCをプログラムでインスタンス化することができました(上記#3のように)。私はseguesを使用して移行をやってみたかった場合、アップルのヘルプドキュメントは、次のコードを提供したり、:

BOOL isShowingLandscapeView; 
- (void)awakeFromNib 
{  
    isShowingLandscapeView = NO; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(orientationChanged:) 
              name:UIDeviceOrientationDidChangeNotification 
              object:nil]; 
} 


- (void)orientationChanged:(NSNotification *)notification 
{ 
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView) 
    { 
    [self performSegueWithIdentifier:@"AlternateView" sender:self]; 
    isShowingLandscapeView = YES; 
    } 

    else if (UIDeviceOrientationIsPortrait(deviceOrientation) && isShowingLandscapeView) 
    { 
    [self dismissViewControllerAnimated:YES completion:nil];// breakpoint shows that this is triggered 
    isShowingLandscapeView = NO; 
    } 
} 

を上記のコードは明らかにのみ(理由seguesの)ナビゲーションコントローラに適用され、それがときの向きに働きました肖像画から風景に変更されましたが、私が肖像画に戻ってくると、風景VCが肖像画に戻って回転してしまいます。私はここで間違って何をしていますか?

私は誰かがこれらの点を確認/確認し、私の質問に答えることができれば幸いです。 ありがとう KB

+0

は「2 - あなただけのナビゲーションコントローラに属しているのVC間seguesを使用することができます。」 < - この部分は真実ではありません。ストーリーボード内の任意のビューコントローラ間をセグメントできます。 – sobri

+0

私は同じ問題があります。私は「モーダル」へ風景ビューコントローラ上のセグエの種類を変更した場合は、その後、私はあなたが記述する動作を得ることはありませんが、私は私が望むものではないが、それは前にあったものよりも優れたナビゲーションバーを、失います – macgeezer

答えて

1

まずは、セグはUINavigationControllerとのみ適用されます。UIViewControllerはセグを実行できます。

アップルのドキュメントでは、オリエンテーションを処理するために使用するUIViewControllerのサポートされている方向を制限する必要があると言われています。つまり、ポートレートのみをポートレートのみに、ランドスケープのみを制限する必要があります。これは、doc以下に行うことができます。

のiOS 6の場合

を上書きオリエンテーションを管理するデザインは、this blog post by Alex Moffatに従うことができます。

それは基本的にカーナビコントローラに組み込まれた同じ内容(景観用と縦に1つ)、表示2つのView Controllerを使用して、ビュー階層を設計する方法について説明します。両方のView Controllerは、自動回転できるHird View Controllerをプッシュできる必要があります。

主なアイデアは、/プッシュナビゲーションスタックから/上の風景ビューをポップし、それに応じて第三のビューの移行を処理するためです。

あなたはそれがあなた自身のビュー階層にコードだ適応することができるはずです。