0

私は問題に直面していUINavigationControllerます...

私はこの階層を持っています

UINavigationController
 |- root controller
 |- ViewController A

ViewController A何かをして押すためのボタンがありますが、追加する前ViewController Bに削除したいViewController AViewController B

したがって、プロセス後の階層は次のようになります

UINavigationController
 |- root controller
 |- ViewController B

ViewController AからにスライドするはずViewController Bですが、押し戻すとに戻りますroot Controller

前もって感謝します。

4

4 に答える 4

3

UINavigationControllerのsetViewControllersメソッドを使用し、ルートとviewControllerBを配列として追加するだけです。

//get the existing navigationController view stack
NSMutableArray* newViewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];

//drop the last viewController and replace it with the new one!
ViewControllerB *childController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil];
[newViewControllers replaceObjectAtIndex:newViewControllers.count-1 withObject:self];

//set the new view Controllers in the navigationController Stack
[self.navigationController setViewControllers:newViewControllers animated:YES];
于 2012-10-17T11:23:06.160 に答える
0

これはあなたを助けるかもしれません。

iphone NavigationController クリア ビュー スタック

それはむしろ問題への異なるアプローチです。必要なView Controllerのインスタンスが利用可能な場合は、いつでもポップできます。

于 2012-10-17T11:19:42.187 に答える
0

見て[UINavigationController setViewControllers:animated:]

[self.navigationController setViewControllers:@[rootViewController, viewControllerB] animated:YES];

これにより、プッシュ アニメーションが発生します。

しかし、正直に言うと、そのような UI を使用している場合、ユーザーを混乱させるため、そもそも NavigationController を使用したくないでしょう。UINavigationController が実装するメタファは非常に単純です。あなたは本当にそれを台無しにしたくない. Apple Human Interface Guidelines を調べてから、ビューを提示する別のオプションを選択することをお勧めします。

于 2012-10-17T11:25:06.740 に答える
-2

最善の方法は、削除とプッシュを同時に行うのではなく、新しい ViewController で navigationController を開始することです。

ViewController Aからのプッシュ時、

[self.navigationController initWithRootViewController:ViewControllerB];
于 2012-10-17T11:14:08.250 に答える