BLOG

2014年3月13日/ applicationWillEnterForeground, iOS, NSNotification

[iOS] アプリがフォアグラウンドになったタイミングで画面を更新する

 

アプリがバックグラウンドに移行したり、フォアグラウンドに移行する挙動でデータを保存したり画面を更新したケースがあると思います。

まずはアプリのライフサイクルから。 

 

それぞれ、AppDelegate.m でコールされるフォアグラウンドとバックグラウンド移行メソッドです。

ホームボタンを押してホーム画面に戻ったり、アプリアイコンを選んで アプリが再起動した際によばれます。

 

ViewControllerに依存しない更新処理

 

タイトルにもあるようにフォアグラウンドになったタイミングで画面を更新する処理について考えていきたいと思います。

ViewControllerのライフサイクルであるメソッド “- (void)viewWillAppear:(BOOL)animated” などでは、フォアグラウンド移行を検知できません。

 

そこで、AppDelegateでフォアグラウンドをハンドリングして、ViewControllerで画面更新処理を実装する方法について紹介します。

 

AppDelegateからViewControllerに通知

 まずはAppDelegateでハンドリングしてViewControllerに通知する方法から。

 

NSNotificationCenterでポストします。

 

NSNotificationCenterの生成

AppDelegateで通知したNSNotificationCenterの受信先をViewControllerに実装します。

これにより、一旦AppDelegateでハンドリングしたアプリの挙動をViewControllerで処理することができます。

 

 あとは、それぞれ@selectorに指定したメソッドをViewControllerでオーバーライドしてそのメソッドで画面更新などの処理を行います。

 

おまけ:UINavigationControllerのルート画面まで戻る

フォアグラウンドに移行したタイミングで画面を更新しようと思っても、UINavigationControllerのpushViewControllerでルート画面からいくつかの階層を遷移しているケースがあると思います。

その場合に、popViewControllerではなく、ルートに一発でフォーカスする方法です。 

 

applicationWillEnterForegroundからのViewControllerの処理で一旦ルートに戻して画面を更新してあげればユーザーにもわかりやすいUIが提供できるでしょう。

 

 

Resent Posts

Category