なんとかするから、なんとかなる

エンジニア関係のことを書きます

iOS UIViewControllerでバックグラウンドへの遷移を検知する

English version below.

はじめに

UIViewControllerにおいて、アプリがバックグラウンドなったときやバックグラウンドに戻ってきたときに処理を行いことはよくあります。

今回はそのやり方を紹介したいと思います。

解決方法

ご存知の通り、UIViewControllerにはバックグラウンドになったときやバックグラウンドから戻ってきたときのデリゲートはありません。

なので、次のようにNotificationCenterに登録するしかありません。

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(viewWillEnterBackground), name: .UIApplicationWillResignActive, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(viewDidEnterBackground), name: .UIApplicationDidEnterBackground, object: nil)
        
    NotificationCenter.default.addObserver(self, selector: #selector(viewWillEnterForeground), name: .UIApplicationWillEnterForeground , object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(viewDidBecomeActive), name: .UIApplicationDidBecomeActive , object: nil)
}

@objc func viewWillEnterBackground() {
    // バックグランドへ遷移前に呼ばれる
}
   
@objc func viewDidEnterBackground() {
    // バックグラウンドへ遷移後に呼ばれる
}
    
@objc func viewWillEnterForeground() {
    // バックグラウンドから遷移してくるときに呼ばれる
}
    
@objc func viewDidBecomeActive() {
    // バックグラウンドから遷移してきたときに呼ばれる
}