私はウィザードと似た一連の画面を作っていますが、ビューとその親ビューを閉じる方法を知り、すぐに 'DoneScreen 'リソースリークを心配することなく。私の見解は次のようになります。ウィザードスタイルのナビゲーションでビューを閉じて別のビューを表示
Base -> Level1 -> DoneScreen
-> Level2 -> DoneScreen
レベル1のコントローラはview.xibで作成し、ベースコントローラによって
[self presentModalViewController ...]
に示すナビゲーションコントローラです。レベル1コントローラは、特定の基準に基づいてレベル2スクリーンの代わりに表示される「DoneScreen」の作成も担当します。
ユーザが画面上のボタンをタップすると、レベル1のコントローラは、レベル2のコントローラをインスタンス化し、それが
[self.navigationController pushViewController ..]
を介してそれを表示し、レベル2のコントローラのビューは、「次へ」ボタンを有しています。
レベル2の画面で '次へ'ボタンを押すと、現在のレベル2のビューとレベル1のビューが閉じられ、作成されてLevel2に渡される 'DoneScreen'が表示されますレベル1のコントローラ。 (部分的にコードの重複を減らすために、及び部分的にコントローラ間で責任を分離するために)レベル2のコントローラにおいて、I「はDoneScreen」は、最初のショーと
[self.navigationController popViewControllerAnimated:YES];
で自身を閉じるならば、レベル1コントローラのモーダルビューは上記依然として存在しています'Base'ではなく[Done]画面の下に表示されます。ベース以外のこれらのビューをすべてクリアし、 'DoneScreen'を表示するにはどうすればよいでしょうか?
シンプルでエレガントな方法でこれを行うには良い提案がありますか?
レベル1〜DoneScreenの部分を同じプロジェクト内で再利用する必要があるため、「すべてを単一のビューのルート」にしなかったことに注意してください。 –
ここでは、「責任の連鎖」パターンを使用して、「次の」コントローラーをLevel1のLevel2に渡すことができると考えました。しかし、私がLevel2に渡したものが格納されていて、popViewControllerAnimatedで破棄される直前に、私は次の画面を表示することができました。問題は、Level2の見解が解消されたために循環参照/メモリリークが発生するかどうかですそれ自身のコントローラーはクリーンアップを開始しますが、 'DoneScreen'がまだ表示されているので、それはできません。 –