アプリがバックグラウンド/フォアグラウンドになった際に、UIViewControllerで何か処理したい時のやり方。
何もしないとUIViewControllerでは検知できない。
環境
Xcode 9.2
Swift 4.0.3
AppDelegate(通知を投げる)
AppDelegateで検知したタイミングで、NotificationCenterを使って通知を投げる。
AppDelegate.swif
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func applicationDidEnterBackground(_ application: UIApplication) {
// アプリがバックグラウンドへ移行するタイミングを通知
NotificationCenter.default.post(name: Notification.Name.UIApplicationDidEnterBackground, object: nil)
}
func applicationWillEnterForeground(_ application: UIApplication) {
// アプリがフォアグラウンドへ移行するタイミングを通知
NotificationCenter.default.post(name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
}
ViewController(通知を受信)
ViewController側では、NotificationCenterを使って受信する通知を登録しておく。
selector: ViewController内で呼ぶメソッド名(任意の名前)
name: AppDelegateで設定した通知の名前
selectorのメソッド名の後ろに「:(コロン)」を忘れないこと
ViewController.swift
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 登録
NotificationCenter.default.addObserver(self, selector: #selector(viewWillEnterForeground(
notification:)), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(viewDidEnterBackground(
notification:)), name: Notification.Name.UIApplicationDidEnterBackground, object: nil)
}
ViewController(受信した通知を処理)
selectorで設定したメソッドを用意して、行いたい処理を記述する。
ViewController.swift
// AppDelegate -> applicationWillEnterForegroundの通知
@objc func viewWillEnterForeground(notification: Notification) {
print("フォアグラウンド")
}
// AppDelegate -> applicationDidEnterBackgroundの通知
@objc func viewDidEnterBackground(notification: Notification) {
print("バックグラウンド")
}
参考URL:http://mzgkworks.hateblo.jp/entry/nsnotificationcenter-viewcontroller