本来やりたかったこと
デフォルトの NavigationLink での画面遷移では、View A
からView B
に移ると、移動先View B
の左上に〈 戻る
ボタンが自動的に現れると思います。そして、そのボタンを押すとView A
に戻ります。
これを、タブ切り替えで表示する初めの画面としてView B
の状態から表示させたかったのですが、上手く実装できず、 NavigationLink を使わない方法を考えることにしました。
やりたいこと
次のような仕様を満たすように二つのビュー、View A
とView B
の間で画面を遷移させたいです。
・起動するとView A
が表示される。
・その画面の Navigation Bar の左にはViewBへ移動
のボタン、右には常に表示
のボタンを表示する。
・ViewBへ移動
のボタンをタップすると、View B
へ画面が遷移する。
・このとき Navigation Bar の左にはボタンを表示しない。右には常に表示
のボタンが表示されている。
試したこと
次のようなコードを試しました。
Swift
1struct ViewA: View { 2 var body: some View { 3 VStack { 4 Text("View A") 5 Text("左上にボタンを表示 右上にもボタンを表示") 6 } 7 } 8} 9 10struct ViewB: View { 11 var body: some View { 12 VStack { 13 Text("View B") 14 Text("左上のボタンは非表示 右上のボタンは表示") 15 } 16 } 17} 18 19struct ContentView: View { 20 @State var showButton = false 21 22 var body: some View { 23 NavigationView { 24 Group { 25 if !showButton { 26 ViewA() 27 .navigationBarItems(leading: Button(action: {self.showButton = true}, label: { Text("ViewBへ移動") })) 28 } else { 29 ViewB() 30 // ここでは左上のボタンを非表示にしたい 31 } 32 } 33 // このコメントアウトを外すと右のボタンしか表示されなくなる 34 //.navigationBarItems(trailing: Button(action: { EmptyView() }, label: {Text("常に表示")})) 35 } 36 } 37 38}
他にも、View A
とView B
によって Navigation Barに表示させる内容が違うので、それぞれを NavigatonView で囲んでみたり、transiton について調べてみたりもしましたが、結局わかりませんでした。
お分かりの方いらっしゃいましたら、どうぞよろしくお願いします。
あなたの回答
tips
プレビュー