Skip to content

Present Modal view with Swift UI in the same way you would do with NavigationView

License

Notifications You must be signed in to change notification settings

diniska/modal-view

Repository files navigation

ModalView

Swift 5.1 Xcode 11 iOS 13.0 iPadOS 13.0 MacOS 10.15 Tests

An analogue of SwiftUI NavigationView that provides a convenient interface of displaying modal views.

How to use

Step 1

Add a dependency using Swift Package Manager to your project: https://github.com/diniska/modal-view

Step 2

Import the dependency

import ModalView

Step 3

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")
            }
        }
    }
}

Result

Presenting modal view with SwiftUI

Additional information

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

About

Present Modal view with Swift UI in the same way you would do with NavigationView

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages