iOS

[Swift]アプリのフォアグラウンドに特定の処理を行う。

投稿日:

はじめに

こんにちは、鈴木です。
最近の端末ではタスクキルをしないと動きが重くなる事も減り、バックグラウンド→フォアグラウンドでアプリを起動し続ける事が多くなりました。
そのため重要なチェックなどはバックグラウンド→フォアグラウンドのタイミングでも行う実装を、備忘も兼ねて実装方法を投稿させていただきます。

今回の目標

バックフォアを行われた時に処理を設定する。
実装を行う処理として
・複数画面で通知を受ける事を想定しBaseとなるクラスを作成する
・何も処理を行わない
・ホーム画面を表示する
・バック後1分間でフォアグラウンドに戻る場合はそのままの画面を表示する
・一つ前の画面に戻す
上記の想定で作成していこうと思います。

画面構成

初期画面(FirstViewController)
第二画面(SecondViewController)
第三画面(ThirdViewController)
第四画面(FourthViewController)
おまけ (ModalViewController)

通知の設定

今回はNotificationを利用してフォアグラウンドとバックグラウンドを取得して行きたいと思います。
Notificationとは何らかのイベントをほかのクラスに送りたい時などにつかいます。
クラス間の親子関係などは特に意識せずに利用可能です。

通知の送信

通知の送信について
バックフォアを取得するだけであれば通知の送信はデフォルトで送信されているため不要です。
(急な仕様変更の時などを考えるのであれば下記と異なるKeyで通知を設定すれば可能です)
・フォアグラウンドになる時に送信されるKey
UIApplicationWillEnterForeground
・バックグラウンドになった時に送信されるKey
UIApplicationDidEnterBackground

通知の受信と削除-BaseController

今回はすべてのViewControllerで通知を受け取る設定を行います。
そのためBaseで下記のように実装しました。
・画面表示時に通知を受信設定を行う
・画面非表示時に受信非表示設定を行う
・このクラスでオーバーライドする用の関数を設定する

それぞれの画面の設定

それでは各画面の設定を行って行きましょう。
BaseViewControllerが通知の受信と削除を行うように記述しました。
それぞれの画面で行うことは下記の通知がきたときの処理のオーバーライドのみです。

初期画面(FirstViewController)

・初期画面で行いたい事
 何も処理を行わない
※ViewWillAppear(戻ってきた時にも呼ばれる)で表示した時に必ずチェックがある場合
 同じ内容をwillEnterForegroundをoverrideして記述してもいいかもしれません。

・コード
特になし(Base側のコードが呼ばれます)

第二画面(SecondViewController)

・第二画面で行いたい事
 ホーム画面を表示する
 NavigationControllerのpopToRootViewControllerを利用

・コード

第三画面(ThirdViewController

・第三画面で行いたい事
バックグラウンド後1分間でフォアグラウンドに戻る場合はそのままの画面を表示する
 バックグラウンド後に時刻を取得
 フォアグラウンド時に時刻を評価
 条件に一致しない場合は何もしない

・コード

第四画面(FourthViewController)

・第三画面で行いたい事
一つ前の画面に戻す
 navigationViewControllerのpopViewControllerを使用

・コード

おまけ (ModalViewController)

・おまけで行いたい事
 ホーム画面へ遷移する
 dismissでモーダルを閉じる
 NavigationControllerをKeyWindowから取得する
 NavigationControllerのpopToRootViewControllerを利用
・コード

さいごに

今回は画面遷移がメインで実装しました。
実際の使用パターンとしては
・画面表示時に通信のチェックを行う
・通信をキャンセルする
など通信関係がよく使われるのではないかと思います。

コードが多くなりがちなViewControllerを少しでも軽量化したいです。
最後までありがとうございます。

参考リンク

https://dev-reco.com/340
https://qiita.com/kijibato/items/a0b9b956f7a9a35dcf1d

page_footer_300rect




page_footer_300rect




-iOS
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

[Swift]ループできるページングビューをUIScrollViewで作ってみた

1 はじめに1.1 前提条件2 ページングビューとは3 実装3.1 Storyboardの準備3.2 コードの実装4 仕組み5 さいごに はじめに こんにちは、nukkyです。 スライドショーやウォー ...

swift

Swift3でMapKitの吹き出し(Callout)タップを取得したい!

1 はじめに2 MapKitでの吹き出しタップ3 吹き出しのみタップしたい!4 さいごに はじめに こんにちは、nukkyです。 今回、iOSのMapKitでGoogleMapのように 吹き出しのタッ ...

swift

Swift3 コードでの画面遷移

1 はじめに1.1 環境2 performSegue2.1 事前準備2.2 遷移先を示すSegueを作成2.3 遷移させるイベントを作成2.4 画面遷移させる3 prepare3.1 事前準備3.2 ...

swift

[Swift]通信状況を取得できるReachability.swiftを使ってみた

1 はじめに2 準備3 実装3.1 通信状況を確認する3.2 通信可能になった時に通知する4 さいごに はじめに こんにちは、nukkyです。 今回は端末の通信状況を取得できるReachability ...

swift

[Swift4]UITextViewにプレースホルダをつける

1 はじめに1.1 前提条件2 実装3 さいごに はじめに こんにちは、nukkyです。 UITextFieldにはプレースホルダが標準で用意されていますが、UITextViewには用意されていません ...

フォロー

follow us in feedly

AppLink

英語

page_side_300rect

2018年9月
« 8月 10月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30 

アプリ情報

目標を達成したい方を応援する、TODOアプリもリリースしております。 下記のアイコンから無料でダウンロードできます。

Web版MyCoach

私たちはより広い方にコーチングを知ってもらいたいと考えています。 下記のサイトにて、コーチの方々を紹介しておりますので、よろしければご覧ください。