4

モーダルビュー「レベル1」を呼び出すメインメニュー「レベル0」があり、別のモーダルビュー「レベル2」を呼び出すアプリのワークフローをスケッチしています。

私はこれを機能させることができ、問題はありません。また、次を使用してスタック全体を閉じることができます。

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

モーダルビューの「レベル2」。

私の問題は、モーダルビュー「レベル2」にナビゲーションバーがある場合、スタック全体を閉じることができないことです。上にリストしたコードは1レベルしか戻らないので、実際にはこれを行った場合と同じように機能します。

[self dismissModalViewControllerAnimated:YES];

モーダルビューの「レベル2」。

概要:モーダルビュー「レベル1」が以下を使用してモーダルビュー「レベル2」を呼び出す場合:

Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease];  
[self presentModalViewController:portalMainController animated:YES];

スタック全体を閉じて、メインメニュー(レベル0)に戻ることができます。しかし、「レベル1」が次のようなナビゲーションバーで「レベル2」を呼び出す場合:

 Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease];  
 UINavigationController *navigationController = [[UINavigationController alloc]    initWithRootViewController:level2];
 [self presentModalViewController:navigationController  animated:YES];
 [navigationController release];

「レベル0」に戻ることはできません。「レベル1」に戻るだけです。

助言がありますか?

4

2 に答える 2

2

Level2Delegate などのレベル 2 コントローラー用のプロトコルを作成します。次に、レベル 2 コントローラの代理オブジェクトをレベル 1 コントローラに設定します。次に、次のようなことができます。

レベル 2 コントローラーは、self.delegate がレベル 1 コントローラーである場合にこれを実装します。

[self.delegate controllerDidFinish:self];

レベル 1 は以下を実装します。

- (void)controllerDidFinish:(Level2Controller *)controller {
    [[self parentViewController] dismissModalViewControllerAnimated:NO];
}

重要なのは、両方を一度に却下しようとするのではなく、一連のイベントをセットアップすることです。

于 2010-07-11T20:43:22.343 に答える
0

なぜ使わないのか、

[self.navigationController popToRootViewControllerAnimated:YES];
于 2012-04-07T22:55:05.330 に答える