[英]Dismiss modal view from another view in swiftUI
I want to dismiss a modal view in SwiftUI, but I just can't我想在 SwiftUI 中关闭模态视图,但我不能
This is my code:这是我的代码:
ContentView:内容视图:
import SwiftUI
enum Destination {
case modal
}
struct ContentView: View {
@Environment(\.presentationMode) var presentationMode
@State private var showModal = false
var body: some View {
NavigationView {
ScrollView(.vertical, showsIndicators: false) {
VStack{
SubscribeButtonView(buttonTitle: "Modal", destination: .modal, showModal: $showModal)
.padding(.top, 50)
.padding(.leading, 30)
.padding(.trailing, 30)
Spacer()
}
}
.navigationBarTitle(Text("Menu"))
}
}
}
The ModalView:模态视图:
import SwiftUI
struct ModalView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
NavigationView {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
Spacer()
SaveButtonView(origin: .modal)
Spacer()
}
.padding(.leading, 20)
.padding(.trailing, 20)
}
.navigationBarTitle("Modal")
.navigationBarItems(trailing: Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Cancel")
})
}
}
}
The SubscribeButtonView:订阅按钮视图:
import SwiftUI
struct SubscribeButtonView: View {
@Environment(\.presentationMode) var presentationMode
var buttonTitle: String
var destination: Destination
@Binding var showModal: Bool
var body: some View {
Button(action: {
self.showModal.toggle()
}) {
HStack {
Image(systemName: "plus.circle")
.font(.body)
Text(buttonTitle)
}
}.sheet(isPresented: $showModal) {
if self.destination == .modal {
ModalView()
}
}
.padding()
}
}
The SaveButtonView:保存按钮视图:
import SwiftUI
struct SaveButtonView: View {
@Environment(\.presentationMode) var presentationMode
var origin: Destination
var body: some View {
Button(action: {
//THIS IS NOT WORKING
self.presentationMode.wrappedValue.dismiss()
}) {
HStack {
Text("Save")
}
}
.padding()
}
}
I tried to create a really simple new project with just one state to call the modal, the menu, the modal and the two buttons and it worked just fine.我试图创建一个非常简单的新项目,只有一个状态来调用模态、菜单、模态和两个按钮,它工作得很好。 I can't understand why it isn't working in the code above
我不明白为什么它在上面的代码中不起作用
Did anyone have this same issue?有没有人有同样的问题?
You are supposed to bind the presentationMode from ModalView
.您应该从
ModalView
绑定presentationMode。
struct SaveButtonView: View {
//@Environment(\.presentationMode) var presentationMode
@Binding var presentationMode : PresentationMode
var origin: Destination
var body: some View {
Button(action: {
//THIS IS NOT WORKING
self.$presentationMode.wrappedValue.dismiss()
}) {
HStack {
Text("Save")
}
}
.padding()
}
}
struct ModalView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
NavigationView {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
Spacer()
SaveButtonView( presentationMode: self.presentationMode, origin: .modal)
Spacer()
}
.padding(.leading, 20)
.padding(.trailing, 20)
}
.navigationBarTitle("Modal")
.navigationBarItems(trailing: Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Cancel")
})
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.