2011-10-18 8 views
23

iOS 5:iPadでモーダルを解除した後に-viewWillAppearが呼び出されない

私は次のコードを使ってモーダルを提示しています:

AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil] 
add.modalPresentationStyle = UIModalPresentationFormSheet; 

[self presentModalView:add animated:YES]; 

そして私の仕事の後、私のメインビューに戻るために次のコードを使います。

[self dismissModalViewControllerAnimated:YES]; 

したがって、デフォルトで-viewWillAppearを呼び出すために使用されます。

私の問題は、

それは iOS4.3でうまくいきました。

しかし、 iOS5では動作しません。

どうすればいいですか?それとも、 iOS5のバグですか?

+0

-viewWillAppearが呼び出されないという問題はありますか?それともモーダルウィンドウが表示されていないのですか? – gaige

+0

@gaige:YES -viewWillAppearは呼び出されません。 – Devang

+0

@Devang: 'add.modalPresentationStyle = UIModalPresentationFormSheet;を削除し、viewWillAppearメソッドを呼び出します。それについて確認してください。 –

答えて

11

-viewWillAppearは、-viewWillDisappearも呼び出された場所でのみ呼び出されることが保証されています。 iPad上のほとんどのモーダルウィンドウでは、ページ全体が不明瞭にならないので、そうではありません。

問題の解決方法は、-viewWillAppearが必要なものに依存しますが、通常はモーダルビューコントローラを却下した同じ場所から直接電話をかける必要があります。

特に、同じモーダルビューを他の場所で使用する可能性のある共通のメカニズムの1つは、モーダルビューコントローラに、ビューが表示されなくなるときに呼び出されるデリゲートを与えることです。これにより、モーダルウィンドウから応答を受け取り、デリゲートビューでデータを強制的にリロードすることもできます。

これが役に立ちます。

+6

iOS5のデリゲートの代わりに[[self presentingViewController] viewWillAppear:YES]を試すことができます。 – NJones

+0

@NJonesですが、viewWillAppearを呼び出すことは可能ですが、他の副作用があるので、私はそれを示唆しています。 – gaige

+0

私はあなたがそれを提案しないことを意味すると思いますか? – NJones

9

iOS 5が電話をviewWillAppearviewWillDisappearに変更しました。たとえば、UIScrollViewviewWillDisappearのサブビュー(正確にはサブビューとしてのView Controller's views)は、別のビューコントローラをスタックにプッシュすると呼び出されます。ただし、ビューコントローラがポップされると、viewWillAppearは呼び出されません。これらのメソッドは、UIScrollViewのサブビューのiOS 4では呼び出されませんでした。

これは私にとっては奇妙な動作です。 iOS 4で起こっていることに頼ることができるなら、何が起こるべきかに関わらず、iOS 5ではそれとは違った働きをしてはいけません。ほとんどの場合、それぞれ特定のインスタンスが呼び出されることはほとんどありません、私は通常ゾーンコーディングにいるので試行錯誤します。私が好きなように動作するなら、私は動きます。その後、iOS 5が入ってきて、すべてにボールを投げ込みます。

UINavigationController'sビューがサブビューで、ViewControllerviewWillAppearはiOSの4で呼び出されなかっ取得しますが、iOSの5囲碁図に呼び出されるん決して、ナビゲーションコントローラのスタックにプッシュされたときに、私も経験しています。

+0

誰でも投票した人は、このプロジェクトをiOS 4とiOS 5シミュレータで試してみてください。両方のシムでブレークポイントを取得すると教えてください... FirstViewController.mのNSLogステートメントです。 https://docs.google.com/open?id=0B5DJHlweMTYj0ZDMyMzgtY2Q3Zi00NzRlLWEyYmQtMGY0YjgzMDNjZDdk – Vinnie

2

私は同じ問題を抱えていました。 私はviewWillAppearがモーダルを却下した後に呼び出されるのではなく、viewDidAppearであることを発見しました。ですので、代わりにviewDidAppearを試してみてください。

+1

モーダルビューでは、 'presentingViewController.viewDidAppear(true)'を追加してから機能しましたが、updateUI()(private func)コールをそこに追加しました。 –

+0

動作しません。そして、これは決して実行可能ではなかったようです –

関連する問題