1. kijibato

    Posted

    kijibato
Changes in title
+【Swift】iOSアプリがフォアグラウンドになった時に、ViewControllerで更新処理をする
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,90 @@
+# これは何?
+アプリがフォアグラウンドになった時に、表示内容を更新したいときの方法です。
+バックグラウンドになった時も同じなので、いっしょにまとめました。
+
+# サンプル
+
+## AppDelegate.swift
+
+AppDelegateの、
+
+- applicationDidEnterBackground
+- applicationWillEnterForeground
+
+に、NSNotificationCenterへ通知する処理を追加。
+
+```swift:AppDelegate.swift
+
+ func applicationDidEnterBackground(application: UIApplication) {
+ NSNotificationCenter.defaultCenter().postNotificationName("applicationDidEnterBackground", object: nil)
+ }
+
+ func applicationWillEnterForeground(application: UIApplication) {
+ NSNotificationCenter.defaultCenter().postNotificationName("applicationWillEnterForeground", object: nil)
+ }
+
+```
+
+## ViewController.swift
+
+表示内容を更新したいViewControllerにも処理を追加します。
+
+```swift:ViewController.swift
+
+import UIKit
+
+class ViewController: UIViewController {
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.viewWillEnterForeground(_:)), name: "applicationWillEnterForeground", object: nil)
+ NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.viewDidEnterBackground(_:)), name: "applicationDidEnterBackground", object: nil)
+ }
+
+ override func didReceiveMemoryWarning() {
+ super.didReceiveMemoryWarning()
+ }
+
+ func viewWillEnterForeground(notification: NSNotification?) {
+ if (self.isViewLoaded() && (self.view.window != nil)) {
+ print("フォアグラウンド")
+ }
+ }
+
+ func viewDidEnterBackground(notification: NSNotification?) {
+ if (self.isViewLoaded() && (self.view.window != nil)) {
+ print("バックグラウンド")
+ }
+ }
+
+}
+```
+
+### viewDidLoad
+
+NSNotificationCenterへ登録する
+
+- applicationWillEnterForegroundを受け取った時に、viewWillEnterForegroundを実行する設定
+- applicationDidEnterBackgroundを受け取った時に、viewDidEnterBackgroundを実行する設定
+
+### viewWillEnterForeground
+
+フォアグランドになったときの処理を書く。
+そのViewControllerが表示されている場合だけ、更新したいので、
+
+```swift
+ if (self.isViewLoaded() && (self.view.window != nil))
+```
+
+のブロック内に処理を書きます。こうしないと、複数ViewControllerでNSNotificationCenter登録している場合、表示されていないViewControllerでも処理が実行されるので、条件付きにしています。
+
+### viewDidEnterBackground
+
+バックグランドになったときの処理を書く。
+
+# バージョン
+このバージョンで確認しました。
+
+- Xcode 7.3.1
+- Swift 2.2