0

モーダルビューのキャンセルについて混乱しています:

ケース 1: ナビゲーション ビュー コントローラーがあり、このナビゲーション ビュー コントローラーからモーダル ビュー コントローラーを提示しています。さて、このモーダル ビューをキャンセルするには、dismissModalView メソッド (ナビゲーション ビュー コントローラーまたはモーダル ビュー コントローラー) をどこから呼び出す必要がありますか?

ケース 2: モーダル ビュー コントローラーがあり、最初のモーダル ビュー コントローラーから別のモーダル ビュー コントローラーを提示しています。さて、2 番目のモーダル ビューをキャンセルするときは、dismissModalView メソッドをどこから呼び出す必要がありますか?最初のモーダル ビュー コントローラーまたは 2 番目のモーダル ビュー コントローラーですか?

間違った場所からキャンセルすると、アプリもクラッシュしますか?

4

3 に答える 3

1

モーダルビューコントローラーを処理するための推奨される方法は、モーダルビューコントローラーをリリースするように提示したクラスに通知する通知です。通常、これに似たコードを使用してモーダルビューを表示します。

SomeClass *yourViewController = [[SomeClass alloc] initWithNibName:@"SomeClass" bundle:nil];
[self presentModalViewController: yourViewController animated: YES];
[yourViewController release];

上記のコードを使用すると、モーダルビューの保持カウントは1になります。これを閉じると、親ビューによって解放され、メモリから削除されます。モーダルビューの「閉じる」ボタンは、次のようなコードを実行する必要があります。

- (void)dismissSelf{
  [[NSNotificationCenter defaultCenter] postNotifivationName:@"I'm done" object:self];
}

親のビューコントローラに戻って、この通知をリッスンし、通知が投稿されたときにモーダルビューを閉じる必要があります。

そうは言っても、あなたの質問に答えるために:

  1. モーダルビューコントローラは、それ自体を閉じることはありません。通知を投稿してから、ナビゲーションコントローラーに処理させます。

  2. 2番目のモーダルビューが閉じられるまで、最初のモーダルビューを閉じることはできません。これを行うと、EXC_BAD_ACCESSエラーが発生します。2番目のモーダルビューを最初のモーダルビューの「内部」と考えてください。最初のものが却下された場合、2番目のものは一緒にドラッグされますが、却下されていません。

于 2011-01-31T15:20:21.727 に答える
1
  1. モーダル ビュー コントローラーを閉じる必要があります。
  2. 2 番目のモーダル ビュー コントローラーからそれを閉じる必要があります。

モーダルView Controllerを閉じようとすると、対応するView Controllerのスコープが失われ、閉じる前にView Controllerを解放した可能性があるため、アプリがクラッシュします

于 2011-01-31T07:51:16.613 に答える
0

(dismissModalViewControllerAnimated を使用して) 提示したコントローラーからモーダル ビューを常に閉じます。そう:

  1. ナビゲーションコントローラーで
  2. 最初のモーダルView Controllerで
于 2011-01-31T14:58:13.027 に答える