前提・実現したいこと
SwiftUIでアプリを開発しています。
ある対象の画面が表示された時に処理を行いたいです。
onAppear
メソッドを使った場合、
- アプリが起動した時(再起動させた時)
- 複数の画面間で遷移された時
の条件では、処理を行う事ができますが、
アプリが起動しており、対象の画面を表示した状態でバックグラウンド状態(ホームボタンを押す等)にして、再度対象の画面を表示しても、onAppear
が動きません。
*動きの模式図を添付
このように、バックグラウンド状態から対象画面を表示した際に、処理を行う方法はありますでしょうか?
ご存知の方おりましたら、ご教授いただけないでしょうか?
追記
SceneDelegate.swift
内のsceneWillEnterForeground
、sceneWillResignActive
を利用すると、バックグラウンド状態からフォアグラウンド状態になる事で処理をできる事がわかりました。
しかし、今回のようにTabViewを利用している際は、どちらのviewでも処理が行われてしまいます。
sceneWillEnterForeground
、sceneWillResignActive
をどちらかのviewのみ処理できるような方法はありますでしょうか?
func sceneDidBecomeActive(_ scene: UIScene) { print("BecomeActive") } func sceneWillEnterForeground(_ scene: UIScene) { print("Foreground") }
該当のソースコード
swiftUI
1import SwiftUI 2 3struct ContentView: View { 4 5 @State private var selection = 0 6 7 var body: some View { 8 TabView(selection: $selection){ 9 Text("First View") 10 .onAppear(){ 11 print("First") 12 } 13 .tabItem { 14 Text("First") 15 } 16 .tag(0) 17 18 Text("Second View") 19 .tabItem { 20 Text("Second") 21 } 22 .tag(1) 23 } 24 } 25} 26 27struct ContentView_Previews: PreviewProvider { 28 static var previews: some View { 29 ContentView() 30 } 31}
補足情報(FW/ツールのバージョンなど)
Xcode: Version 11.7
Swift: Swift 5
あなたの回答
tips
プレビュー