✋ Requirements
Platforms | Minimum Swift Version |
---|---|
iOS 15+ | 5.0 |
[Swift package manager][spm]
Swift package manager is a tool for automating the distribution of Swift code and is integrated into the Swift compiler.
Once you have your Swift package set up, adding NavigationView as a dependency is as easy as adding it to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/Mijick/NavigationView", branch(“main”))
]
1. Setup library
Inside your @main
structure, call the implementNavigationView
method with the view that is to be the root of the navigation stack. The view must be of type NavigatableView
. The method takes an optional argument - config
, which can be used to configure certain attributes of all the views that will be placed in the navigation stack.
@main struct NavigationView_Main: App {
var body: some Scene {
WindowGroup {
ContentView()
.implementNavigationView(config: nil)
}
}
}
2. Declare a view to be pushed to the navigation stack
NavigationView by Mijick provides the ability to push any view conforming to the NavigatableView
protocol to the navigation stack.
struct ExampleView: NavigatableView {
...
}
3. Implement body
Fill your view with content
struct ExampleView: NavigatableView {
var body: some View {
VStack(spacing: 0) {
Text("Witaj okrutny świecie")
Spacer()
Button(action: pop) { Text("Pop") }
}
}
...
}
4. Implement configure(view: NavigationConfig) -> NavigationConfig
method
This step is optional - if you wish, you can skip this step and leave the configuration as default.
Each view has its own set of methods that can be used to create a unique look for each view in the stack.
struct ExampleView: NavigatableView {
func configure(view: NavigationConfig) -> NavigationConfig { view.backgroundColour(.red) }
var body: some View {
VStack(spacing: 0) {
Text("Witaj okrutny świecie")
Spacer()
Button(action: pop) { Text("Pop") }
}
}
...
}
5. Present your view - from any place in your code!
Just call ExampleView().push(with:)
from the selected place. As simple as that!
struct SettingsViewModel {
...
func openSettings() {
...
ExampleView().push(with: .verticalSlide)
...
}
...
}
6. Close your view - it’s even simpler!
There are two ways to do this:
- By calling one of the methods
pop
,pop(to type:)
,popToRoot
inside any view
struct ExampleView: NavigatableView {
...
func createButton() -> some View {
Button(action: popToRoot) { Text("Tap to return to root") }
}
...
}
- By calling one of the static
NavigationManager
methods:NavigationManager.pop()
NavigationManager.pop(to type:)
where type is the type of view you want to return toNavigationManager.popToRoot()
7. Wait, there’s even more!
We’re almost done, but we’d like to describe three additional methods that you might like:
- With the
setAsNewRoot
method you can change the root of your navigation stack:
ExampleView()
.push(with: .verticalSlide)
.setAsNewRoot()
EnvironmentObject
can be passed, but remember to do this BEFORE pushing the view to the stack:
ExampleView()
.environmentObject(object)
.push(with: .verticalSlide)
- Use
onFocus
, notonAppear
If you want to be notified every time a view is visible (is on top of the stack), useonFocus
method:
struct ExampleView: NavigatableView {
var body: some View {
VStack(spacing: 0) {
Text("Witaj okrutny świecie")
Spacer()
Button(action: pop) { Text("Pop") }
}
.onFocus(self) {
// Do something
}
}
...
}
Try our demo
See for yourself how does it work by cloning [project][Demo] we created