2

私のアプリでは、同じViewControllerのいくつかの異なるインスタンスが必要です。今のところ、次のような新しいインスタンスを作成しています。

iSafeViewController *tab = [[iSafeViewController alloc] init];

[tab setModalPresentationStyle:UIModalPresentationFullScreen];
[tab setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];

[self presentViewController:tab animated:YES completion:nil];

素晴らしい。とにかくこれはiSafeViewControllerクラスで行われるので、現在スタック上の最新のコントローラーを閉じるだけの別のボタンがあります。

 - (IBAction)closeTab:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
 }

さて、しかし、私は本当にこれらのインスタンスに戻ることができるようにしたいと思います。それで、私は2つの質問があります。

  1. dismissViewControllerAnimatedそのコントローラのインスタンスをメモリから削除しますか。そうでない場合、私がそれを再提示することができる方法はありますか?

  2. 次に、viewControllerインスタンスをナビゲートするためのより良い方法がおそらくありますpresentViewControllerAnimated。少なくとも、viewControllerの新しいインスタンスを作成し、それらのそれぞれにナビゲートできるようにするためのより良い方法があります。できればスタックではありません。つまり、viewControllerインスタンスが3つある場合、3番目からメインのインスタンスに移動する方法はありますか?

任意のアイデアをいただければ幸いです。ありがとう。

4

1 に答える 1

5

dismissViewControllerAnimatedそのコントローラーのインスタンスをメモリから削除しますか?削除しない場合、それを再提示する方法はありますか?」

呼び出しによってViewControllerdismissViewControllerAnimatedがメモリから明示的に削除されることはありませんが、コードの他の部分がView Controllerへの強力な参照を格納していない場合、提示されているView ControllerがVCを閉じると、通常のメモリ管理システムに従って割り当てが解除される可能性があります。

したがって、コード内の何かが(モーダルにそれを提示しているVCを除いて)ビューコントローラーへの参照を持っていることを確認した場合、それは却下された後に消えることはなく、そうです、これはあなたがそれを再利用できることを意味します。

ビューコントローラへの「ランダムアクセス」については、 (アニメーションなしで!)への複数の呼び出しなどのUINavigationControllerメソッドを使用および使用して、任意のビューコントローラに移動する効果を作成できます。これはちょっとしたハックのように感じます。popToViewController:animated:pushViewController:animated:

あるいは、できれば、独自のカスタムコンテナビューコントローラを作成することもできます。これは、他のViewControllerの表示を処理するViewControllerです。Appleドキュメントを参照してください。

これは、このテーマに関する優れたWWDCビデオです。UIViewControllerContainmentの実装

参考文献:

于 2013-02-04T16:44:51.640 に答える