私は次のコードを使用してモーダルを提示しています:
AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil]
add.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalView:add animated:YES];
そして、仕事が終わったら、次のコードを使用してメインビューに戻ります。
[self dismissModalViewControllerAnimated:YES];
したがって、デフォルトでは-viewWillAppear
を呼び出すために使用されます。
私の問題は、
iOS4.で正常に動作していました。
しかし、それはiOS5では機能しません。
私は何をすべきか ?またはそれはiOS5のバグですか?
-viewWillAppear
は、-viewWillDisappear
も呼び出された場所でのみ呼び出されることが保証されています。 iPadのほとんどのモーダルウィンドウでは、ページ全体が隠されていないため、これは当てはまりません。
問題の解決策は、-viewWillAppear
が何のために必要かによって異なりますが、一般に、モーダルビューコントローラーを閉じるのと同じ場所から直接電話をかける必要があります。
このための一般的なメカニズムの1つは、特に同じモーダルビューを別の場所で使用する場合に、ビューが消えようとしているときに呼び出されるデリゲートをモーダルビューコントローラーに与えることです。これにより、モーダルウィンドウから応答を取得したり、デリゲートビューでデータを強制的に再読み込みしたりすることができます。
お役に立てれば。
iOS5は間違いなく彼らの呼び出しをviewWillAppear
とviewWillDisappear
に変更しました。たとえば、サブビュー(View Controller's views
正確にはサブビューとして)UIScrollView
で、別のViewControllerをスタックにプッシュするとviewWillDisappear
が呼び出されます。ただし、View Controllerがポップされると、viewWillAppear
は呼び出されません。これらのメソッドは、iOS4のUIScrollView
サブビューで呼び出されることはありませんでした。
これは私にとって奇妙な行動です。何が起こるかに関係なく、iOS 4で発生することを信頼できれば、iOS 5でも動作が異なることはないはずです。ほとんどの場合、それぞれがどの特定のインスタンスで呼び出されるのかわかりません。 、私は通常、ゾーンコーディングを行っているので、試行錯誤します。それが私の好きなように機能する場合、私は先に進みます。次に、iOS 5が登場し、すべてにレッキングボールを投げます。
私はまた、UINavigationController's
ビューはサブビューであり、ViewController
はナビゲーションコントローラースタックにプッシュされます。viewWillAppear
はiOS4では呼び出されませんが、iOS5では呼び出されます。図を参照してください。
私も同じ問題を抱えていました。モーダルを閉じた後、viewWillAppear
は呼び出されませんが、viewDidAppear
は呼び出されます。したがって、代わりにviewDidAppear
を試してください。