私のストーリーボードには次のレイアウトがあります
MyView1ViewController (root controller) /
ContainerView --> MyNavigationController ----------
\ MyView2ViewController
コンテナー ビューには、ルート ビュー コントローラーとして MyView1ViewController を持つ UINavigationController が埋め込まれています。UINavigationController から MyView2ViewController への手動プッシュ セグエを作成しました。
ユーザー入力に基づいて、View1 または View2 が表示されます。このサンプルでは、ボタンは 2 つのコントローラーを切り替えるだけです。View1 (ルートコントローラー) が表示されている場合は、View2 コントローラーをプッシュします。コントローラーはスタックにプッシュされますが、View2 は表示されません。以下にリストされているコードは、これをどのように実装したかを示しています。
- (void)transitionToView:(int)type {
if (self.v2Controller == nil) {
self.v2Controller = (MyView2ViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"View2"];
}
NSLog(@"top=%@", self.topViewController);
NSLog(@"visible=%@", self.visibleViewController);
for (id cntrllr in self.viewControllers) {
NSLog(@"children=%@", cntrllr);
}
switch (type) {
case 2:
**[self pushViewController:self.v2Controller animated:YES];**
break;
case 1:
[self popToRootViewControllerAnimated:YES];
break;
default:
[self popToRootViewControllerAnimated:YES];
break;
}
for (id cntrllr in self.viewControllers) {
NSLog(@"after children=%@", cntrllr);
}
NSLog(@"after visible=%@", self.visibleViewController);
}
シミュレーターで実行してこのコードを実行したときのログ メッセージは次のとおりです。
トップ = MyView1ViewController: 0x7425f80
可視=MyView1ViewController: 0x7425f80
children=MyView1ViewController: 0x7425f80
children=MyView1ViewController の後: 0x7425f80
children=MyView2ViewController の後: 0x10a142c0
表示後=MyView2ViewController: 0x10a142c0
私の解釈では、View2 コントローラーをナビゲーション スタックにプッシュしており、それは可視コントローラーである必要がありますが、View2 は表示されていません。
同様のタイトルの問題を調べましたが、私の状況には何も当てはまらないようです。構成に問題はありますか? IB に欠けているものはありますか? プッシュを行うだけでコントローラーがそのビューを表示することを期待する必要がありますか? 任意の提案をいただければ幸いです。