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?
The first option is to tell the view to dismiss itself using its presentation mode environment key. Any view can read its presentation mode using @Environment(\. presentationMode) , and calling wrappedValue. dismiss() on that will cause the view to be dismissed.
SwiftUI gives us equivalents to UIKit's viewDidAppear() and viewDidDisappear() in the form of onAppear() and onDisappear() . You can attach any code to these two events that you want, and SwiftUI will execute them when they occur.
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() } } }
SwiftUI Xcode Beta 5
First, declare the @Environment which has a dismiss method which you can use anywhere to dismiss the view.
import SwiftUI struct GameView: View { @Environment(\.presentationMode) var presentation var body: some View { Button("Done") { self.presentation.wrappedValue.dismiss() } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With