SwiftUI:关闭模式

kee*_*n3d 1 swift swiftui

我知道这个问题以前曾被问过和回答过。不知道这在SwiftUI的Beta 4中是否已更改/取消,但我似乎无法获得isPresented解决方案来消除显示为的模式sheet

这里是什么,我试过一个简单的例子,我想这会工作,但点击“关闭”什么也不做,当我检查self.isPresented?.valuenil

struct DetailView: View {
    @Environment(\.isPresented) var isPresented: Binding<Bool>?
    var body: some View {
        Button(action: {
            self.isPresented?.value = false
        }) {
            Text("Close")
        }
    }
}

struct ContentView: View {
    @State private var showingModal = false
    var body: some View {
        Button(action: {
            self.showingModal = true
        }) {
            Text("Show detail")
        }.sheet(isPresented: $showingModal) {
            DetailView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据建议进行更新,这可行。似乎有太多关于我的书,希望对此进行更新。

struct DetailView: View {
    @Binding var showingModal: Bool
    var body: some View {
        Button(action: {
            self.showingModal = false
        }) {
            Text("Close")
        }
    }
}

struct ContentView: View {
    @State private var showingModal = false
    var body: some View {
        Button(action: {
            self.showingModal = true
        }) {
            Text("Show detail")
        }.sheet(isPresented: $showingModal) {
            DetailView(showingModal: self.$showingModal)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

bac*_*h-f 6

Beta 6

使用presentationMode@Environment

struct SomeView: View {
    @Environment(\.presentationMode) var presentationMode

    var body: some View {
        VStack {
            Text("Ohay!")
            Button("Close") {
                self.presentationMode.wrappedValue.dismiss()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)