iOSアプリがフォアグラウンドになった時の更新処理 – Swift4.0

備忘録。
https://qiita.com/kijibato/items/a0b9b956f7a9a35dcf1d より

例えば現在時刻を表示するアプリの場合、単純に「override func viewDidLoad() {」にコードを書くだけだと、アプリ再起動時にしか時刻が更新されないので、バックグラウンド -> フォアグラウンドになった際に更新する処理を入れる必要があります。

コードの詳細は上の記事の方が記載しているので割愛

サンプルコード(Swift4.0)

//サンプルコード
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dateLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //NSNotificationCenterへ登録
        //NSNotification.Name.UIApplicationWillEnterForegroundを受け取った時に、viewWillEnterForegroundを実行する設定
        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewWillEnterForeground(_:)), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
        
        //NSNotification.Name.UIApplicationDidEnterBackgroundを受け取った時に、viewDidEnterBackgroundを実行する設定
        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewDidEnterBackground(_:)), name: NSNotification.Name.UIApplicationDidEnterBackground, object: nil)
        
        self.updateDateLabel()
        print("起動時の表示")
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    //フォアグラウンドの処理を記載
    //ViewControllerが表示されている場合のみ更新。
    //こうしないと、複数ViewControllerでNSNotificationCenter登録している場合、表示されていないViewControllerでも処理が実行される
    @objc func viewWillEnterForeground(_ notification: Notification?) {
        if (self.isViewLoaded && (self.view.window != nil)) {
            print("フォアグラウンド")
            self.updateDateLabel()
        }
    }
    
    //バックグラウンドの処理を記載
    @objc func viewDidEnterBackground(_ notification: Notification?) {
        if (self.isViewLoaded && (self.view.window != nil)) {
            print("バックグラウンド")
        }
    }
    
    func updateDateLabel() {
        
        let now = NSDate()
        let date = DateFormatter()
        date.dateFormat = "HH:mm:ss"
        let string = date.string(from: now as Date)
        
        if "06:00:00" <= string && string <= "12:00:00" {
            dateLabel.text = "おはようございます。現在の時刻は\(string)です。"
            
        } else if "12:00:01" <= string && string <= "15:00:00"{
            dateLabel.text = "お昼だよ。現在の時刻は\(string)です。"
            
        } else if "15:00:01" <= string && string <= "18:00:00"{
            dateLabel.text = "おやつの時間だよ。現在の時刻は\(string)です。"
            
        } else if "18:00:01" <= string && string <= "21:00:00"{
            dateLabel.text = "夜ご飯だよ。現在の時刻は\(string)です。"
            
        } else if "21:00:01" <= string && string <= "23:59:59"{
            dateLabel.text = "明日の準備してね。現在の時刻は\(string)です。"
            
        } else if "00:00:00" <= string && string <= "05:59:59"{
            dateLabel.text = "早く寝なさい。現在の時刻は\(string)です。"
        }
    }
    
}

お知らせ

ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。
RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!