Edited at

【Swift】iOSアプリがフォアグラウンドになった時に、ViewControllerで更新処理をする

More than 1 year has passed since last update.


これは何?

アプリがフォアグラウンドになった時に、表示内容を更新したいときの方法です。

バックグラウンドになった時も同じなので、いっしょにまとめました。

(標準の通知が使えますと教えていただいたので、最初の投稿で書いていたAppDelegateの部分は消しました。)


サンプル(Swift 3.0)


  • Xcode 8.2.1

  • Swift 3.0.2


ViewController.swift

表示内容を更新したいViewControllerに処理を追加します。


ViewController.swift

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewWillEnterForeground(_:)), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewDidEnterBackground(_:)), name: NSNotification.Name.UIApplicationDidEnterBackground, object: nil)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

func viewWillEnterForeground(_ notification: Notification?) {
if (self.isViewLoaded && (self.view.window != nil)) {
print("フォアグラウンド")
}
}

func viewDidEnterBackground(_ notification: Notification?) {
if (self.isViewLoaded && (self.view.window != nil)) {
print("バックグラウンド")
}
}

}



viewDidLoad

NSNotificationCenterへ登録する


  • NSNotification.Name.UIApplicationWillEnterForegroundを受け取った時に、viewWillEnterForegroundを実行する設定

  • NSNotification.Name.UIApplicationDidEnterBackgroundを受け取った時に、viewDidEnterBackgroundを実行する設定


viewWillEnterForeground

フォアグラウンドになったときの処理を書く。

そのViewControllerが表示されている場合だけ、更新したいので、

    if (self.isViewLoaded && (self.view.window != nil))

のブロック内に処理を書きます。こうしないと、複数ViewControllerでNSNotificationCenter登録している場合、表示されていないViewControllerでも処理が実行されるので、条件付きにしています。


viewDidEnterBackground

バックグラウンドになったときの処理を書く。


サンプル(Swift 2.2)

Swift 2系の、投稿初期のサンプルです。


  • Xcode 7.3.1

  • Swift 2.2


ViewController.swift


import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.viewWillEnterForeground(_:)), name: UIApplicationWillEnterForegroundNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.viewDidEnterBackground(_:)), name: UIApplicationDidEnterBackgroundNotification, 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("バックグラウンド")
}
}

}