LoginSignup
2
0

More than 1 year has passed since last update.

【Swift】フォアグラウンド、バックグラウンドに入ったのを検知

Last updated at Posted at 2022-11-21

はじめに

viewWillAppearで日付を取得し、ラベルに表示させていました。アプリをキルしない状態で日付を跨ぐと画面の切り替え等を行わない限り、viewWillAppearは呼ばれないためUIが更新されない問題が発生しました。
viewControllerのライフサイクルにはフォアグラウンドやバックグラウンドになる時に呼ばれるものは存在しないため、別の角度からUIを更新できるようにします。

※間違った認識等あれば、ご指摘いただけると幸いです。

解決策

アプリをキルしないユーザーは一定数存在しているため、解決策としてNotificationCenterを使い、フォアグラウンドに入った時を検知して特定のUIを更新する処理を実装する。
ほぼ同じ処理なので、バックグラウンドになった時も合わせて記載しています。

NotificationCenterがよく分からない人は使用頻度が高いので調べてみるといいと思います。

フォアグラウンド、バックグラウンドに入った時に通知を受け取る

NotificationCenterでフォアグラウンド、バックグラウンドになったのを以下で検知します。
フォアグラウンド:UIApplication.willEnterForegroundNotification
バックグラウンド:UIApplication.didEnterBackgroundNotification

ViewController.swift
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // アプリがフォアグラウンドに入った時に呼ばれる
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(viewWillEnterForeground(_:)),
            name: UIApplication.willEnterForegroundNotification,
            object: nil
        )
        // アプリがバックグラウンドに入った時に呼ばれる
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(viewDidEnterBackground(_:)),
            name: UIApplication.didEnterBackgroundNotification,
            object: nil
        )
    }
}

実行したい処理

以下の関数を定義して、実行したい処理を記載していきます。

ViewController.swift
    @objc func viewWillEnterForeground(_ notification: Notification?) {
        if (self.isViewLoaded && (self.view.window != nil)) {
            // 実行したい処理を記載(例:日付ラベルの更新)
        }
    }
    @objc func viewDidEnterBackground(_ notification: Notification?) {
        if (self.isViewLoaded && (self.view.window != nil)) {
            // 実行したい処理を記載
        }
    }

他にもUIApplicationでアプリの状態を検知できるメソッドがあるので、Apple公式の以下をご参考ください。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0