0

私のアプリケーションでは、3層のモーダルビューコントローラーがあります。

1)だから私rootViewControllertabbar

2)applicationDidFinishLaunching私は、上記のモーダルviewControllerと言って、を提示しています。viewController Atabbar

3)「viewControllerA」のボタンをクリックすると、別のviewController Bモーダルを表示します。

4)そして、上のボタンアクションは、そのasをモーダルにviewController B提示します。navigationControllerrootViewControllerviewController C

5)最後に、からviewController Cに戻りたいと思いviewController Aます。

使ってみました

[[[self parentViewController] parentViewController]dismissModalViewControllerAnimated:YES];

で、しかしそれは私をの代わりにviewController C戻します。viewController BviewController A

どうすれば元に戻すことができますかviewController A

どんな助けでもいただければ幸いです。

4

3 に答える 3

2

modalTransitionStyle のように見える transitionStyle を使用して、navigationControl のすべての「モーダル」ビューをプッシュします。

すべてを 1 つのモーダル ナビゲーション コントローラ ID で提示:)

于 2012-11-10T18:57:09.967 に答える
1

複雑な VC スタックがあります。あるポスターが提案したように、カスタムの DismissView メソッドを実装することもできますが、それは脆弱です。このビューを再利用したり、アプリ内で移動したりすると、他の VC がどのように構成されているかについての特定の知識に依存しすぎているため、機能しなくなります。彼らの状態。

委任チェーンを構成できます。これは、ビューを操作する標準的な方法です。提示する VC は、提示するものをすべて削除する責任もあります。

これを行うには、B によって実装されるプロトコルを構築し、B への参照を使用して C を初期化します。同様に、A への参照を使用して B を初期化します (それらの間で渡す必要がある他の通信に応じて、同じプロトコルを使用する可能性があります)。

次に、C でボタンをクリックすると、B のデリゲート メソッドが呼び出されます。B は C を適切にアンワインドし、A のデリゲート メソッドを呼び出します。A は B を適切に巻き戻します。

これには、VC の知識をカプセル化したままにしておくという利点があります。A は B をどのように提示したかを知っているため、それを非提示にする方法を知っており、B は C をどのように提示したかを知っており、それを非提示する方法を知っています。ある VC が、別の VC によってどのように提示されたかについて推測する必要はありません。

于 2012-11-10T18:35:36.403 に答える
0

次のようなビュー却下メソッドを実装します。

- (IBAction)dismissView
 {
   [self dismissModalViewControllerAnimated:NO];   // dismiss c
   [[self parentViewController] dismissModalViewControllerAnimated:NO]; //dismiss b
 }

[self parentViewController]の親ビューを返します。viewControllerCつまり、ですviewControllerB。したがって、そのビューも却下します。

于 2012-11-10T09:25:16.827 に答える