— SwiftUI, dismiss(), Navigation — 1 min read
When working with SwiftUI, navigation is an essential part of creating a seamless user experience. SwiftUI provides several tools and techniques to manage navigation, and one of them is the dismiss() function. In this article, we will take a closer look at SwiftUI's dismiss() function and explore how it can be used to dismiss views and navigate within an app.
dismiss()?The dismiss() function is a SwiftUI modifier that allows us to dismiss a presented view or navigate back to the previous screen. It is primarily used in combination with modal presentations, such as presenting a sheet or a fullscreen modal view. By invoking dismiss(), we can remove the presented view from the screen and return to the previous view hierarchy.
One common use case for dismiss() is to dismiss a sheet presentation. Let's consider an example where we have a button that presents a sheet when tapped:
1struct ContentView: View {2 @State private var isPresentingSheet = false3 4 var body: some View {5 Button("Present Sheet") {6 isPresentingSheet = true7 }8 .sheet(isPresented: $isPresentingSheet) {9 SheetView()10 }11 }12}13
14struct SheetView: View {15 @Environment(\.presentationMode) var presentationMode16 17 var body: some View {18 VStack {19 Text("This is a sheet")20 Button("Dismiss") {21 presentationMode.wrappedValue.dismiss()22 }23 }24 .padding()25 }26}In the above example, we define a ContentView with a button that presents a sheet. The SheetView is presented as a sheet using the sheet(isPresented:content:) modifier. Inside the SheetView, we have a button labeled "Dismiss." When the button is tapped, we invoke dismiss() on the presentationMode environment variable, which dismisses the sheet and returns to the ContentView.
Another scenario where dismiss() can be used is when presenting a fullscreen modal view. Let's take a look at an example:
1struct ContentView: View {2 @State private var isPresentingModal = false3 4 var body: some View {5 Button("Present Modal") {6 isPresentingModal = true7 }8 .fullScreenCover(isPresented: $isPresentingModal) {9 ModalView()10 }11 }12}13
14struct ModalView: View {15 @Environment(\.dismiss) var dismiss16 17 var body: some View {18 VStack {19 Text("This is a modal view")20 Button("Dismiss") {21 dismiss()22 }23 }24 .padding()25 }26}In this example, we have a button in the ContentView that presents a fullscreen modal view when tapped. The ModalView is presented using the fullScreenCover(isPresented:content:) modifier. Inside the ModalView, we have a button labeled "Dismiss." When the button is tapped, we invoke the dismiss() function from the Environment to dismiss the fullscreen modal view and return to the ContentView.