5

ビューをナビゲーション コントローラー スタックにプッシュしたいのですが、現在のビューを削除して、ユーザーが次のビューを押しても前のビューに移動しないようにします。

一方向の流れは、次のいずれかになります。

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];
4

2 に答える 2

16

プッシュしていない最後の例に関して、これは機能しますか?

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
[viewControllers removeObjectIdenticalTo:self];
[viewControllers addObject:controller];
[self.navigationController setViewControllers: viewControllers animated: YES];

自分自身なしでコントローラーをコントローラーの配列に設定したため、navigationControllerプロパティをに設定している可能性がありnil、新しいものをすぐにプッシュできません。とにかくやってみて損はありません。

于 2013-01-19T02:24:34.097 に答える