Swift 如何进行图纸切换和导航到视图
我有3个视图A、B、C 当我单击视图中的按钮时,B图纸将可见。我有一个按钮在B表中。我想在“工作表”视图中按一个按钮关闭/切换“工作表”,然后导航到C视图。你知道我怎样才能做到吗 斯威夫特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()}){
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")
}
}
}
}
}