2012-01-28 4 views
57

私は、プログラムでストーリーボードでインスタンス化されたビューコントローラをプッシュする別の方法を探しています。ストーリーボードでプログラムを使用してビューコントローラをプッシュする別の方法

  1. pushViewControllerを使用して::

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"]; 
    [self.navigationController pushViewController:lvc animated:YES]; 
    
  2. Segueをプログラムで実行する 私は実際に私は次のビューに移動するために使用するだけでなく、以前に戻ることを、二つの方法を見つけました:

    [self performSegueWithIdentifier: @"SongSegue" sender: self]; 
    

あなたは、SOMを持っていますか代替案やこの操作を実行する最善の方法についてのヒントがありますか?私はモーダルビューを参照していないことに注意してください。

+0

個人的には、あなたがストーリーボードとセグを使用しているので、#2はそれを行うより良い方法です。 –

+0

#1は、segueを持つことができないviewcontrollerをプッシュしなければならない場合に便利でしょうか?すなわちビュービューコントローラをマップビュー注釈の開示ボタンから押し出す。 – kappa

+0

何かがセグを持つことができます。すべてがIBで完全に自動化されたセグを持つことはできません(ボタンや表のセルなど)。しかし、ビューコントローラ自体から開始してIBでセグを作成し、それを実行するために#2を使用することもできます。これはまさにマップコールアウトボタンのためのものです。 – rickster

答えて

4

個人的には、私はUINavigationControllerの下にあるUIViewControllerにあるときに#2を使用します。私はUINavigationControllerが存在しないと思う。

私はUITabBarControllerの下にあるビューを使用しています、私は別のタブに移行するには、次のコードを使用します。

NSUInteger tabIndex = 2; // Index of the tab I want to select 
UIViewController * viewCtrl = [_tabController.viewControllers objectAtIndex:tabIndex]; 
_tabController.selectedViewController = viewCtrl; 
+2

'objectAtIndex:0'は' objectAtIndex:tabIndex'ではありませんか? – Kevin

+0

@Kevinあなたは正しいです。この例では編集しました。 – gfrigon

36

アップルは、プログラムseguesを実行するためにperformSegueWithIdentifier:sender:someObjectを使用することをお勧めします。このようにそれを行うには利点のカップルが少なくともあります。独自のコードの

  • 少ないあなたは、フレームワークは、作業の多くを行うせていることを意味します。アップルがプッシュセグのための新しいクールなビジュアルエフェクトを提供したり、パフォーマンスを向上させたり、将来のiOSリリースでバグを修正すれば、アプリは無償で入手できます。フレームワークがあなたのためにやっている可能性のある作業を行うために書くコードのすべての行は、バグを書く機会を増やします。

  • は、変更が容易であることを意味します。すべてのプッシュセグをモーダルセグに変更したい場合や、独自のスーパービジュアルエフェクトを行うカスタムセグエータイプに変更する場合は、IBですべてを選択し、ハンティングではなくワンクリックでセグのタイプを変更できますあなたのコードの周りに。また


、あなたが第一又は第二の方法を使用するかどうか、順番にビューコントローラをプッシュすると、ユーザーが期待するように動作しません。「戻る」前のビューコントローラに移動します。ユーザーが戻るボタンをタップすると

LocationViewController -> SongViewController -> LocationViewController 

:あなたは「バック」行くために再びLocationViewControllerを押すと

LocationViewController -> SongViewController 

:あなたはSongViewControllerをプッシュする場合は、ナビゲーションスタックの最後に追加されますナビゲーションバーで、それらは再び位置ビューからソングビュー、位置ビューに戻ります。 (また、これを続けていくと、 "戻る"と "進む"のすべてが、増加するビューコントローラのチェーンに追加され、他の問題を引き起こす可能性があります)。

代わりに、戻る。その目的のために、ナビゲーションバーにボタンを配置します。このボタンは、ほとんどのユースケースを処理する必要があります。独自のコントロールを元に戻す必要がある場合は、IBでiOS 5を使用することはできませんが、ナビゲーションコントローラのpopViewControllerAnimated:メソッドを使用してプログラムで実行できます。

関連する問題