An analogue of SwiftUI NavigationView
that provides a convenient interface of displaying modal views.
Add a dependency using Swift Package Manager to your project: https://github.com/diniska/modal-view
Import the dependency
import ModalView
Use ModalPresenter
and ModalLink
the same way you would use NavigationView
and NavigationLink
:
struct ContentView: View {
var body: some View {
ModalPresenter {
ModalLink(destination: Text("Modal View")) {
Text("Main view")
}
}
}
}
To add a "close" button to a modal view we can use a dismiss
closure provided by the ModalLink
:
struct ContentView: View {
var body: some View {
ModalPresenter {
ModalLink(destination: { dismiss in
Button(action: dismiss) {
Text("Dismiss")
}
}) {
Text("Main view")
}
}
}
}
Moving the destination in the code above to a separate structure is a recommended way here to refactor the code here as modal views regularly contains a bit more that just a text or button.
struct ContentView: View {
var body: some View {
ModalPresenter {
ModalLink(destination: MyModalView.init(dismiss:)) {
Text("Main view")
}
}
}
}
struct MyModalView: View {
var dismiss: () -> ()
var body: some View {
Button(action: dismiss) {
Text("Dismiss")
}
}
}
Learn more here: Display Modal View with SwiftUI