2012-04-05 16 views
1

私はストーリーボードを使ってiOS 5タブ付きアプリケーションを持っています。iOS 5モーダルビューからpushViewControllerを試してみよう

マイタブバーコントローラは、3つのナビゲーションコントローラを指します。そのうちの一つから

は、フローは次のようになります。 - >写真のビュー(モーダル) -

スタートビューの写真の画面で>カタログビュー

、私は次の付いたボタンがありますコード:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    UIViewController *catalogView = [self.storyboard instantiateViewControllerWithIdentifier:@"CatalogView"]; 
    [self.navigationController pushViewController:catalogView animated:YES]; 
} 

私はpresentingViewControllerparentViewControllerと浮気しようとした - にも種類がUINavigationControllerにそれらをキャスト。それは、次のエラーメッセージが表示され、それがクラッシュし:

2012-04-06 00:32:45.808 myapp[19345:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController pushViewController:animated:]: unrecognized selector sent to instance 0x18d0d0' 

だから、私はUINavigationControllerのホールドを持っていないと言われますが、UITabBarController

これを回避する手段はありますか?

答えて

4

「プッシュ」スタイルのセグは、UINavigationControllerによって管理されているビューコントローラからのみ実行できます。そうしようとすると、何も起こりません。

質問に記載されているようにモーダルに写真ビューを表示する代わりに、UINavigationControllerのインスタンスをモーダルビューとして表示し、フォトビューをナビゲーションビューのルートビューコントローラにする必要があります。 (これはすべてストーリーボードで設定できます)。その後、あなたのプッシュセグが機能します。あなたが最初のビューコントローラ(写真ビュー)に表示されるナビゲーションバーをご希望されない場合は

あなたが使用することができます。

[self.navigationController setNavigationBarHidden:YES animated:NO] 

これは、トップナビゲーションバーを非表示になります。新しいView Controllerをプッシュしたら、そのView BarにNav Barを再度表示させるには、新しいView Controller上でsetNavigationBarHiddenをNOに設定する必要があります。

[self.navigationController setNavigationBarHidden:NO animated:NO] 
+0

これはストーリーボードを通じて設定するための優先リソースがありますか?新しいプロジェクトを設定すると、開始ビューはデフォルトでUINavigationViewではなくUIViewになります。最初のビューとしてUINavigationViewを設定する方法があれば、それは素晴らしいことでしょう! – Danny

-1

Segue'sは、あるシーンから別のシーンに移行するための好ましい方法です。

ボタンから、またはVC自体からSegueを作成し、そのセグをプッシュしたいシーンに接続することができます。

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    [self [email protected]"mySegueID" sender:nil]; 
} 

その後、prepareForSegue方法で:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier [email protected]"mySegueID"]) { 
     // Do whatever setup you need to do before firing the segue 
    } 
} 

あなたが接続している場合セグエプロパティがプッシュするように設定し、ボタンのIBActionで(VCにあなたが接続されていると仮定して)これを実行していることを確認しますButton自体にSegueを設定すると、performSegueメソッドを完全に削除することができます(実際にはIBActionは必要ありません)。

+0

私は両方を試しましたが、ボタンを押すと何も起こりません。モーダルビューからはできないかもしれませんか? – MartinHN

+1

"プッシュ"スタイルのセグは、UINavigationControllerによって管理されているビューコントローラからのみ行うことができます。フォトビューをモーダルに表示する代わりに、UINavigationコントローラのインスタンスをモーダルビューとして表示し、フォトビューをナビゲーションビューのルートビューコントローラにします。それであなたのプッシュセグがうまくいくはずです。 – jonkroll

+0

@jonkrollそれはうまくいくようです!どのようにしても、私はモーダルフォトビューのトップバーを避けることができます。 – MartinHN

関連する問題