プログラムでストーリーボードにインスタンス化されたView Controllerをプッシュする別の方法を探しています。実際には、次のビューに移動するために使用する方法と、前のビューに戻る方法の2つを見つけました。
pushViewController
を使用:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"];
[self.navigationController pushViewController:lvc animated:YES];
Segue
をプログラムで実行する:
[self performSegueWithIdentifier: @"SongSegue" sender: self];
代替案と、この操作を実行する最良の方法に関するヒントはありますか?モーダルビューを参照していないことに注意してください。
AppleはperformSegueWithIdentifier:sender:someObject
プログラムでセグエを実行します。この方法で行うことには、少なくともいくつかの利点があります。
独自のコードが少ないは、フレームワークにより多くの作業を行わせることを意味します。 Appleがプッシュセグエの超クールな新しい視覚効果を思いついたり、パフォーマンスを改善したり、将来のiOSリリースのバグを修正した場合、アプリは無料で入手できます。フレームワークがあなたのためにしているかもしれない仕事をするためにあなたが書くコードのバグを書くあなたのチャンスを増やします。
IBの詳細は、簡単に変更できることを意味します。すべてのプッシュセグエをモーダルセグエ、または独自の超クールな視覚効果を行うカスタムセグエタイプに変更する場合は、IBで「すべて」を選択し、ハンティングの代わりにワンクリックでセグエタイプを変更できますあなたのコードの周り。
また、最初の方法を使用する場合でも、2番目の方法を使用する場合でも、View Controllerを押して前のView Controllerに「戻る」ことは、ユーザーの期待どおりには機能しません。 SongViewController
をプッシュすると、ナビゲーションスタックの最後に追加されます。
LocationViewController -> SongViewController
LocationViewController
をもう一度押して「戻る」場合:
LocationViewController -> SongViewController -> LocationViewController
ユーザーがナビゲーションバーの戻るボタンをタップすると、ロケーションビューからソングビュー、ロケーションビューに再び戻ります。 (また、これを続けると、「戻る」と「進む」たびにView Controllerのチェーンが増え続け、他のトラブルにつながる可能性があります。
代わりに、Navigation Controllerに戻ることを処理させる必要があります。その目的のためにナビゲーションバーにボタンを配置し、ほとんどのユースケースを処理します。戻るために独自のコントロールを作成する必要がある場合、iOS 5ではIBでこれを行うことはできませんが、Navigation ControllerのpopViewControllerAnimated:
方法。
個人的には、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;