0

私のストーリーボードには次のレイアウトがあります

                                         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 に欠けているものはありますか? プッシュを行うだけでコントローラーがそのビューを表示することを期待する必要がありますか? 任意の提案をいただければ幸いです。

4

0 に答える 0