新しいビューコントローラを呼び出し、現在のビューコントローラをナビゲーションコントローラスタックから削除します。 たとえば、私はビューコントローラAにあり、私はBに電話します。ナビゲーションコントローラからビューを削除するには
今私はスタックA、Bを持っています。 今はC(Bから)を呼び出したいと思います。 スタックをA、Cにしたい。
ありがとう。
新しいビューコントローラを呼び出し、現在のビューコントローラをナビゲーションコントローラスタックから削除します。 たとえば、私はビューコントローラAにあり、私はBに電話します。ナビゲーションコントローラからビューを削除するには
今私はスタックA、Bを持っています。 今はC(Bから)を呼び出したいと思います。 スタックをA、Cにしたい。
ありがとう。
これが答えです。
次のコードは、現在のView Controllerをポップします。
UINavigationController *navController = self.navigationController;
// retain ourselves so that the controller will still exist once it's popped off
[[self retain] autorelease];
[navController popViewControllerAnimated:NO];
そして、これは新しいものをプッシュ:
ViewControllerC *viewC = [[ViewControllerC alloc] init];
[navController pushViewController:viewC animated:TRUE];
はそれが役に立てば幸い! 2番目の最後のナビゲーションアイテム削除する
私はあなたが最初にナビゲーションスタックからBをポップしてからCを押し込むことでこれを行うことができると思います。このためには、[UINavigationController popViewControllerAnimated]と[UINavigationController pushViewController:animated]を使用できるはずです。
これは間違いありませんが、完全ではありません。私は最終的にそれが働いているが、それをポップする前にコントローラを保持しなければならないので、後で別のビューをプッシュすることができます。 UINavigationController * navController = self.navigationController; [[自己保持]自動解除]; [navController popViewControllerAnimated:NO]; – Tony
アップルの参考文献によると、http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html UINavigationControllerはサブクラス化されていません。なぜ簡単なことがとても複雑なのか? – Tony
@トニー私の悪い、私はそれを忘れてしまった。前のコメントを無視して編集します。私はそれらをすべて削除します... – barley
たとえば
NSMutableArray *navigationStack = [[NSMutableArray alloc] initWithArray:
self.navigationController.viewControllers];
[navigationStack removeObjectAtIndex:[navigationStack count] - 2];
self.navigationController.viewControllers = navigationStack;
を、ナビゲーションスタックからコントローラBを除去するために、コントローラCにviewDidLoad
からこれを実行します。 ARCの文脈では
が、ここでは可能なソリューションです:あなたが言うことができるように
NSMutableArray* navArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[navArray replaceObjectAtIndex:[navArray count]-1 withObject:nextViewController];
[self.navigationController setViewControllers:navArray animated:YES];
、このコードは「B」あなたは、スタック(から削除しようとしているビューで通常のプッシュコードを置き換えますあなたの質問で)。行1は、ビューコントローラのリストをナビコントローラスタックからNSMutableArray
にコピーします。 2行目は、最後(一番上)のビューを次のビュー( "C")に置き換えます。 3行目は、実際のnav-controllerのスタックを変更された配列にし、遷移を最上位のアイテムにアニメートします。 (もちろん、あなたがルートのViewControllerでこのコードを使用することはできません。)私は別の方法hereを発見し、ARCのためにそれを適応さ
:
最初の行があるために必要とされるUINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:YES];
あなたがポップしたらスタックの現在のビューself.navigationController
はnil
になり、3行目は機能しません。以前の方法と同じ行数ですが、この方法では、スタックを「手動で」手にするのではなく、組み込みメソッドを使用して動作します。
このコードを使用できます。
NSMutableArray * navigationArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; [navigationArray removeAllObjects]; self.navigationController.viewControllers = navigationArray;
希望はあなたのために働くでしょう。
どのようにARCを有効にしてこれを行うには?コンパイラは 'retain'の使用を認めません – asdasd
@Oscar、私の解決策、[below](http://stackoverflow.com/a/17328244/1431728)を参照してください。 – JohnK