iosswiftswiftui

How to pop or dismiss a view programmatically


I couldn't find any reference about any ways to make a pop or a dismiss programmatically of my presented view with SwiftUI.

Seems to me that the only way is to use the already integrated slide dow action for the modal(and what/how if I want to disable this feature?), and the back button for the navigation stack.

Does anyone know a solution? Do you know if this is a bug or it will stays like this?


Solution

  • This example uses the new environment var documented in the Beta 5 Release Notes, which was using a value property. It was changed in a later beta to use a wrappedValue property. This example is now current for the GM version. This exact same concept works to dismiss Modal views presented with the .sheet modifier.

    import SwiftUI
    
    struct DetailView: View {
        @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
        var body: some View {
            Button(
                "Here is Detail View. Tap to go back.",
                action: { self.presentationMode.wrappedValue.dismiss() }
            )
        }
    }
    
    struct RootView: View {
        var body: some View {
            VStack {
                NavigationLink(destination: DetailView())
                { Text("I am Root. Tap for Detail View.") }
            }
        }
    }
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                RootView()
            }
        }
    }