Swift 如何进行图纸切换和导航到视图

Swift 如何进行图纸切换和导航到视图,swift,swiftui,Swift,Swiftui,我有3个视图A、B、C 当我单击视图中的按钮时,B图纸将可见。我有一个按钮在B表中。我想在“工作表”视图中按一个按钮关闭/切换“工作表”,然后导航到C视图。你知道我怎样才能做到吗 斯威夫特 struct A: View{ @State var displayBSheet = false var body: some View{ NavigationView{ VStack{ Button(action: {self.displayBSheet.toggle()}){

我有3个视图A、B、C

当我单击视图中的按钮时,B图纸将可见。我有一个按钮在B表中。我想在“工作表”视图中按一个按钮关闭/切换“工作表”,然后导航到C视图。你知道我怎样才能做到吗

斯威夫特

struct A: View{
 @State var displayBSheet = false
 var body: some View{
   NavigationView{
    VStack{
      Button(action: {self.displayBSheet.toggle()}){
        Text("Navigate to BSheet")
      }.sheet(isPresented: $displayBSheet){
       BSheet()
      }
      NavgiationLink(destination: C()){
       Text("Navigate To C")
      }
    }
   }
 }
}
斯威夫特

@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
struct MainView: View {
    var body: some View {
        Button(action:{
          self.presentationMode.wrappedValue.dismiss()//This only sheet but I want to navigate to C View also
        }){
          Text("Close sheet and navigate to struct C")
        }
    }
}

我清理了您的代码,以获得一个良好的工作代码:

    import SwiftUI

struct ContentView: View {
    var body: some View {
        
        HomeView()
        
    }
}


struct HomeView: View {
    
    @State var homeView: Bool = false
    
    @State var displayViewB: Bool = false
    @State var displayViewC: Bool = false
    
    
    
    var body: some View{
        
        ZStack {
            
            VStack {
                
                HStack {
                    Text("Home").font(Font.largeTitle.bold()).padding()
                    Spacer()
                }
                
                Spacer()
            }
            
            VStack {
                Button(action: { homeView = true; displayViewB = true }) {
                    Text("open ViewB")
                }
                .sheet(isPresented: $homeView) {
                    
                    
                    if displayViewB
                    {
                        ViewB(homeView: $homeView, displayViewB: $displayViewB, displayViewC: $displayViewC)
                    }
                    
                    
                    if displayViewC
                    {
                        ViewC(homeView: $homeView, displayViewC: $displayViewC)
                    }
                }
                
            }
            
            
        }
        .onChange(of: homeView) { _ in
            if displayViewB == false && displayViewC == true {
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {homeView = true}
            }
            else if displayViewB == false && displayViewC == false {
                homeView = false
            }
        }
    }
}



struct ViewB: View {
    
    @Binding var homeView: Bool
    @Binding var displayViewB: Bool
    @Binding var displayViewC: Bool
    
    var body: some View {
        
        Button(action:{
            
            displayViewB = false
            
            displayViewC = true
            
            homeView = false
            
            
        }){
            Text("close ViewB and open Viewc")
        }
        
        
    }
}






struct ViewC: View {
    
    @Binding var homeView: Bool
    @Binding var displayViewC: Bool
    
    var body: some View {
        
        Button(action:{
            
            displayViewC = false
            homeView = false
            
        }){
            Text("close ViewC go to HomeView")
        }
        
        
    }
}

您可以在工作表的
onDismiss
中执行此简单操作

struct A: View{
 @State var displayBSheet = false
 @State var displayCSheet = false     // << this !!

 var body: some View{
   NavigationView{
    VStack{
      Button(action: {self.displayBSheet.toggle()}){
        Text("Navigate to BSheet")
      }.sheet(isPresented: $displayBSheet, onDismiss: {
        self.displayCSheet = true     // << here !!
      }){
       BSheet()
      }
      NavgiationLink(destination: C(), isActive: $displayCSheet){    // << here !!
       Text("Navigate To C")
      }
    }
   }
 }
}
结构A:视图{ @状态变量displayBSheet=false @状态变量displayCSheet=false//
struct A: View{
 @State var displayBSheet = false
 @State var displayCSheet = false     // << this !!

 var body: some View{
   NavigationView{
    VStack{
      Button(action: {self.displayBSheet.toggle()}){
        Text("Navigate to BSheet")
      }.sheet(isPresented: $displayBSheet, onDismiss: {
        self.displayCSheet = true     // << here !!
      }){
       BSheet()
      }
      NavgiationLink(destination: C(), isActive: $displayCSheet){    // << here !!
       Text("Navigate To C")
      }
    }
   }
 }
}