前提・実現したいこと
swiftUI
を利用してアプリの開発をしています。
以下の動作になるように作成したいの場合、どのようなコードにすれば良いでしょうか?
TabView
を利用して複数のView
へ遷移できる- 各
View
はNavigationView
を利用して、親、子のView
間を遷移できる - 子の
View
に遷移している状態のTabView
へ、他のTabView
から遷移したときに、まず親のView
が参照され、その後に子のViewが参照される。
該当のソースコード
swift
1import SwiftUI 2 3struct ContentView: View { 4 var body: some View { 5 BootomTabView() 6 } 7} 8 9struct BootomTabView: View { 10 11 @State var tabNumber = 1 12 13 var body: some View { 14 TabView(selection: $tabNumber){ 15 View1() 16 .tabItem{ 17 Text("1") 18 }.tag(1) 19 View2() 20 .tabItem{ 21 Text("2") 22 }.tag(2) 23 View3() 24 .tabItem{ 25 Text("3") 26 }.tag(3) 27 } 28 } 29} 30 31struct View1: View { 32 var body: some View { 33 NavigationView{ 34 VStack{ 35 Text("View1") 36 NavigationLink( 37 destination: SubView(), 38 label: { 39 Text("To SubView") 40 }) 41 } 42 } 43 .onAppear(){ 44 print("onAppear_View1") 45 } 46 } 47} 48 49struct View2: View { 50 var body: some View { 51 NavigationView{ 52 VStack{ 53 Text("View2") 54 NavigationLink( 55 destination: SubView(), 56 label: { 57 Text("To SubView") 58 }) 59 } 60 } 61 .onAppear(){ 62 print("onAppear_View2") 63 } 64 } 65} 66 67 68struct View3: View { 69 var body: some View { 70 NavigationView{ 71 VStack{ 72 Text("View3") 73 NavigationLink( 74 destination: SubView(), 75 label: { 76 Text("To SubView") 77 }) 78 } 79 } 80 .onAppear(){ 81 print("onAppear_View3") 82 } 83 } 84} 85 86 87struct SubView: View { 88 var body: some View { 89 Text("SubView") 90 .onAppear(){ 91 print("onAppear_SubView") 92 } 93 } 94} 95
発生している問題
アプリを立ち上げ
0. View_1
のタブ内でSubView
(子のView)へ遷移する
0. BottomTab
の2をタップしView_2
へ遷移する
0. BottomTab
の1をタップしView_1
へ遷移する
上記の動きをするとコンソールには、
onAppear_View1
onAppear_SubView
onAppear_View2
onAppear_SubView
onAppear_View1
となりますが、以下のように表示されるように動作させたいです(4行目と5行目が入れ替わり動作する)。
onAppear_View1
onAppear_SubView
onAppear_View2
onAppear_View1
onAppear_SubView
以上nように動作させるには、どのようにすれば良いでしょうか?
補足情報(FW/ツールのバージョンなど)
Xcode: Version 12.3
iOS: 14.0
Life Cycle: SwiftUI App
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/29 16:01