Skip to content

Commit f76da07

Browse files
committed
Navigation Stack notes
1 parent 7e8e0ae commit f76da07

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
## Introduction to NavigationStack in SwiftUI
2+
3+
SwiftUI's evolution has introduced a shift from traditional `NavigationView` to `NavigationStack`, offering a more flexible and modern approach to navigation. Unlike `NavigationView`, which defines each view individually, `NavigationStack` builds a list of views over a root view. Interaction with a `NavigationLink` adds a view to the top of the stack, with the stack always displaying the most recently added view [1].
4+
5+
### Basic Usage of NavigationStack
6+
7+
To use `NavigationStack`, you start by defining a `NavigationPath` state and then use it within a `NavigationStack` view. Here's a basic example:
8+
9+
```swift
10+
import SwiftUI
11+
12+
struct ContentView: View {
13+
@State private var path = NavigationPath()
14+
15+
var body: some View {
16+
NavigationStack(path: $path) {
17+
List {
18+
NavigationLink("Go to detail A", value: "Show AAAA")
19+
NavigationLink("Go to B", value: "Show BBB")
20+
NavigationLink("Go to number 1", value: 1)
21+
}
22+
.navigationDestination(for: String.self) { textValue in
23+
Text("Detail View for \(textValue)")
24+
}
25+
}
26+
}
27+
}
28+
```
29+
30+
In this example, `NavigationLink`s are used to navigate between different views based on the value passed to them. The `navigationDestination(for:)` modifier specifies what view to display for a given value type [1].
31+
32+
### Value-based Navigation Links
33+
34+
`NavigationStack` introduces a new modifier called `navigationDestination` that associates a destination view with a presented data type. This allows for more dynamic and data-driven navigation. Here's how you can use it:
35+
36+
```swift
37+
NavigationStack {
38+
List(bgColors, id: \.self) { bgColor in
39+
NavigationLink(value: bgColor) {
40+
Text(bgColor.description)
41+
}
42+
}
43+
.listStyle(.plain)
44+
.navigationDestination(for: Color.self) { color in
45+
color.frame(maxWidth: .infinity, maxHeight: .infinity)
46+
}
47+
.navigationTitle("Color")
48+
}
49+
```
50+
51+
In this example, `NavigationLink`s are bound to `Color` values, and the `navigationDestination(for: Color.self)` modifier specifies how to display the detail view for a `Color` value [4].
52+
53+
### Handling Multiple Value Types
54+
55+
`NavigationStack` supports handling multiple value types for navigation. This can be achieved by adding multiple `navigationDestination` modifiers for different value types:
56+
57+
```swift
58+
.navigationDestination(for: String.self) { systemImage in
59+
Image(systemName: systemImage)
60+
.font(.system(size: 100.0))
61+
}
62+
```
63+
64+
This allows for a cleaner and more organized flow, where different types of navigation links can be handled by different `navigationDestination` modifiers [4].
65+
66+
### Conclusion
67+
68+
`NavigationStack` provides a powerful and flexible way to manage navigation in SwiftUI apps. It allows for a more dynamic and data-driven approach to navigation, making it easier to handle complex navigation flows. By understanding how to use `NavigationStack` and its associated modifiers, you can create sophisticated navigation experiences in your SwiftUI apps.

0 commit comments

Comments
 (0)