问题描述
我正在尝试使用 tabView 制作一个 swiftui 应用程序.我希望 tabview 正常工作,但选定的选项卡可能来自第一页第一个视图
I'm trying do make a swiftui app with tabView.I want the tabview works normally but also the selected tab may come from the first pageThe first view
struct ContentView: View {
@State var selectedTab = 0
var body: some View {
VStack{
NavigationView{
VStack(alignment: .center, spacing: 0){
Spacer()
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "book")
Text("Enseignements")
}
}
HStack{
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "list.dash")
Text("Étapes")
}
}
Image(systemName: "map")
.resizable()
.frame(width: 150, height: 150, alignment: .center)
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "photo.on.rectangle")
Text("Album")
}
}
}
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}
}
Spacer()
}
.edgesIgnoringSafeArea(.bottom)
}
}
}
}
第二个视图
struct AccueilView: View {
@Binding var selectedTab: Int
var body: some View {
TabView(selection: $selectedTab) {
EtapeView(card: Card.example)
.tabItem {
Image(systemName: "list.dash")
Text("Étapes")
}
.tag(0)
AlbumView()
.tabItem {
Image(systemName: "photo.on.rectangle")
Text("Album")
}
.tag(1)
TeachingView(card: Card.example)
.tabItem{
Image(systemName: "book")
Text("Enseignements")
}
.tag(2)
ChronicView(card: Card.example)
.tabItem{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}.tag(3)
}
}
}
并且我希望 ContentView 将 selectedTab 传递给 AccueilView,而 AccueilView 不更改 tabView 正常状态.例如:如果我点击专辑"在 ContenView 中,我直接进入 AccueilView 等中的相册,例如,从相册中我可以进入 chronique.谢谢你的帮助
And I want the ContentView pass the selectedTab to the AccueilView, while the AccueilView don't change the tabView normal state.Eg : if i click on "Album" in ContenView I go directly in Album in AccueilView and etc and from Album i can go to chronique for example.Thank u for the help
推荐答案
如果我正确理解您的目标,这里是可能的方法.
If I correctly understood your goal, here is possible approach.
使用 Xcode 12/iOS 14 测试
Tested with Xcode 12 / iOS 14
修改后的代码:
struct TestNavigateToTab: View {
var body: some View {
VStack{
NavigationView{
VStack(alignment: .center, spacing: 0){
Spacer()
NavigationLink(destination: AccueilView(selectedTab: 2)){
VStack{
Image(systemName: "book")
Text("Enseignements")
}
}
HStack{
NavigationLink(destination: AccueilView(selectedTab: 0)){
VStack{
Image(systemName: "list.dash")
Text("Étapes")
}
}
Image(systemName: "map")
.resizable()
.frame(width: 150, height: 150, alignment: .center)
NavigationLink(destination: AccueilView(selectedTab: 1)){
VStack{
Image(systemName: "photo.on.rectangle")
Text("Album")
}
}
}
NavigationLink(destination: AccueilView(selectedTab: 3)){
VStack{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}
}
Spacer()
}
.edgesIgnoringSafeArea(.bottom)
}
}
}
}
struct AccueilView: View {
@State var selectedTab: Int
init(selectedTab: Int) {
_selectedTab = State(initialValue: selectedTab)
}
var body: some View {
TabView(selection: $selectedTab) {
Text("EtapeView")
.tabItem {
Image(systemName: "list.dash")
Text("Étapes")
}
.tag(0)
Text("AlbumView")
.tabItem {
Image(systemName: "photo.on.rectangle")
Text("Album")
}
.tag(1)
Text("TeachingView")
.tabItem{
Image(systemName: "book")
Text("Enseignements")
}
.tag(2)
Text("ChronicView")
.tabItem{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}.tag(3)
}
}
}
这篇关于从另一个视图接收选定的 TabView - SwiftUI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!