1. ホーム
  2. ios

モーダルビューコントローラーの提示と解除

2023-08-03 22:37:11

質問

どなたか、モーダルビューコントローラを最初に表示し、次にそれを解除するために使用できるサンプルコードを教えていただけませんか?これは私が試しているものです。

NSLog(@"%@", blue.modalViewController);
[blue presentModalViewController:red animated:YES];
NSLog(@"%@", blue.modalViewController);
[blue dismissModalViewControllerAnimated:YES];
NSLog(@"%@", blue.modalViewController);

このコードは viewDidLoad にあります("blue" と "red" は両方とも UIViewController のサブクラスです)。私は、赤のビューを表示し、すぐにアニメーションで隠すことを期待しています。しかし、このコード片はモーダルビューを表示するだけで、それを解除することはありません。何か思い当たることはありますか?最初のログには "null" が表示され、他の2つのログには <RedViewController: 0x3d21bf0>

もう一つのポイントは、もし私が applicationDidFinishLaunching にこのコードを入れたら、赤いビューは全く表示されず、すべてのログは "null" を取得します。

どのように解決するのですか?

まず、applicationDidFinishLaunchingにそのコードを入れた場合、Interface Builderからインスタンス化されたコントローラがまだアプリケーションにリンクされていない場合があります(つまり、"red" と "blue" はまだ nil ).

しかし、最初の質問に答えるなら、あなたが間違っているのは dismissModalViewControllerAnimated: を間違ったコントローラで呼び出していることです! このようにする必要があります。

[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];

通常、"red"コントローラは、ある時点で(おそらく"cancel"ボタンがクリックされたとき)自分自身を解任することを決定するはずです。そして、"red" コントローラは、以下のメソッドを呼び出すことができます。 self :

[self dismissModalViewControllerAnimated:YES];

それでもうまくいかない場合は、コントローラがアニメーションで提示されるため、提示後すぐにコントローラを解除することができないことが関係している可能性があります。