7つのビューコントローラーで構成されるiOS5とXcode4.3.2を使用するiOSアプリがあります。VC1はVC2にリンクし、VC2はVC3-VC7にリンクでき、これらの各コントローラーは相互にリンクできます(サイドバーナビゲーションと考えてください)。セグエを使用すると、ビューがスタックに繰り返し追加され、ユーザーが行ったり来たりすると、大量のメモリを使用する可能性があります。以前のコントローラーをリリースする場所でこのナビゲーションを実装するにはどうすればよいですか?これらはすべて小さなコントローラであるため、ロードにかかる時間/プロセッサ/メモリはほとんどありません。presentViewControllerを表示してから、なんとかしてpresentingViewControllerを解放できますか?ありがとう。
3 に答える
UINavigationController を実装すると、push および pop ビュー コントローラー メソッドを使用して前後に移動できます。 popToViewController:animated:は、他の 3 つの便利なメソッドとともにここで説明されています。
VC1 から VC2 までは問題ないようです。VC3 ~ VC7 の場合、次のことができます。
- それをスタックにプッシュする代わりに、modalViewController として提示します。
または: - Controller がコントローラーのスタックに既に存在する場合は UINavigationController の popToViewController:animated: 関数を使用し、そうでない場合はプッシュします。お気に入り
// Assuming u need to push VC6
for(UIViewController *controller in [urNavController viewControllers]){
if([controller isKindOfClass:[VC6 class]])
{
[urNavController popToViewController:controller animated:YES];
}
else{
VC6 *VC6controller = [[VC6 alloc] init];
[urNavController pushViewController:VC6controller];
}
}
UINavigationController
のメソッドを使用- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
して、一番上のビュー コントローラーの下にあるビュー コントローラーを削除できます。ナビゲーション コントローラの配列は不変であるため、配列に対して直接メソッドをviewControllers
使用することはできません。aを変更可能な配列にし、変更可能な配列から破棄する (非表示の) ビュー コントローラーを削除し、結果としてスリム化されたビュー コントローラーのスタックを上記のメソッドに渡す必要があります。最上位のビュー コントローラーは変更されないため、このケースでは遷移アニメーションはありません (以下の説明を参照)。そのため、引数を気にせずに viewControllers プロパティを直接設定することもできます。NSMutableArray
removeObject...
viewControllers
mutableCopy
animated:
Appleのドキュメントから:
説明 このメソッドを使用して、各コントローラーを明示的にプッシュまたはポップすることなく、現在のビュー コントローラー スタックを更新または置換できます。さらに、このメソッドを使用すると、変更をアニメーション化せずに一連のコントローラーを更新できます。これは、起動時にナビゲーション コントローラーを以前の状態に戻したい場合に適している場合があります。
アニメーションが有効になっている場合、このメソッドは、項目配列の最後の項目がナビゲーション スタックに既にあるかどうかに基づいて、実行するトランジションの種類を決定します。ビュー コントローラが現在スタック内にあるが、最上位の項目ではない場合、このメソッドはポップ トランジションを使用します。最上位のアイテムの場合、遷移は実行されません。ビュー コントローラーがスタック上にない場合、このメソッドはプッシュ遷移を使用します。遷移は 1 回だけ実行されますが、その遷移が完了すると、スタックの内容全体が新しいビュー コントローラーに置き換えられます。たとえば、コントローラ A、B、および C がスタック上にあり、コントローラ D、A、および B を設定する場合、このメソッドはポップ トランジションを使用し、結果のスタックにはコントローラ D、A、および B が含まれます。