ナビゲーション コントローラーを使用する代わりに、いくつかのセグエを呼び出すプロジェクトに取り組んでいます。プロジェクトの早い段階で、モーダル セグエをセットアップし、いくつかの異なるボタンの IBAction メソッド内から呼び出しました (セグエと一緒に文字列を渡すときに、異なるボタンから同じセグエを呼び出します)。
私のストーリーボードでは、次のようになります。
次に、私のコードでは、これを行います:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"Vimeo Segue");
if([segue.identifier isEqualToString:@"playVimeo"]) {
WebViewViewController *controller = (WebViewViewController *)segue.destinationViewController;
controller.vimeoURL = vimeoURL;
}
}
- (IBAction)launchCreativeFuture:(id)sender {
vimeoURL = @"72053500";
[self performSegueWithIdentifier:@"playVimeo" sender:sender];
}
これはうまくいき、私はこれに満足しています。でも...
これを行う別の方法に出くわしましたが、なぜ両方が機能するのか、どちらが推奨されるのかについて混乱しています。
ここでは、これらの図のように、リンクされた IBAction とモーダル セグエを追加しました。
そして、私のコードは次のようになります。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"pushToGraduateCourses"]) {
NSLog(@"Grad Segue");
UIViewController *controller = (UIViewController *)segue.destinationViewController;
}
}
- (IBAction)launchGraduate:(id)sender {
NSLog(@"Grad Button");
[self performSegueWithIdentifier:@"pushToGraduateCourses" sender:sender];
}
私が知る限り、コードに関してはかなり同じです...これを行うと、次の警告が表示されることを除いて:「警告:プレゼンテーションの進行中にプレゼンテーションを試みてください!」... コンソールを見ると、"Grad Segue" が 2 回ログに記録されています... これは理にかなっていますが、最初の例では、"Vimeo Segue" は 1 回しかログに記録されていません。
私が求めているのはいくつかの質問だと思います:
a)2つの方法の違いを誰でも見つけることができますか?できないから。
b) Interface Builder からセグエを作成すると、そのボタンにリンクされている IBAction からプログラムで呼び出さなくても、ボタンから performSegueWithIdentifier が自動的に呼び出されますか?
c) どの方法が推奨されますか?
前もって感謝します、
〜ジェシー