ビューをナビゲーション コントローラー スタックにプッシュしたいのですが、現在のビューを削除して、ユーザーが次のビューを押しても前のビューに移動しないようにします。
一方向の流れは、次のいずれかになります。
View X -> View 1 -> View 2 -> View 3
View X -> View 1 -> View 3
しかし、反対方向の流れは常に次のようになります。
View X <- View 1 <- View 3
問題は、ビュー 2 コントローラーで処理したいということです。ビュー 3 でそれを行うと、戻るボタンのアクションを簡単にオーバーライドできます。ビュー 3 はさまざまなビューになる可能性があり、それらすべての戻るボタンをオーバーライドして、スタックの前のコントローラーがビュー 2 コントローラーであるかどうかを確認したくありません。それらはすべて同じ親クラスを持っているため、「View 3 クラス」コントローラーだけの戻るボタンをオーバーライドすることはできません。
View 2のコントローラーがナビゲーションスタックに追加されないように、これを試しました:
//Pop controller from stack before pushing
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController pushViewController:controller animated:YES];
ただし、ポップするとビューが削除され、次のコントローラーにプッシュされません
同じ結果の他のオプション
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
[viewControllers removeObjectIdenticalTo:self];
self.navigationController.viewControllers = viewControllers;
[self.navigationController pushViewController:controller animated:YES];