Contents

diniska/modal-view

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]

Styling

There are two styles available: sheet (default) and fullScreenCover. To change a style use method View.modalViewPresentationStyle.

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 as modal views regularly contain 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

Package Metadata

Repository: diniska/modal-view

Default branch: master

README: README.md