17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Swift4】ViewControllerでアプリがバックグラウンド/フォアグラウンドになったことを検知する方法

Last updated at Posted at 2018-02-20

アプリがバックグラウンド/フォアグラウンドになった際に、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

17
16
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
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?