Skip to content

Commit fcd3a45

Browse files
committed
Update README.md
1 parent 3c8e7f5 commit fcd3a45

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

README.md

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,80 @@
44
### Experimenting with navigation link. if you find this idea interesting you can expend it into more powerful solution.
55

66

7+
- The result navigaion definition
8+
```swift
9+
var body: some View {
10+
NavigationView{
11+
VStack{
12+
Button("go1") { route = .go1}
13+
Button("go2") { route = .go2}
14+
Button("go3") { route = .go3}
15+
}.navigation(route: $route)
16+
}.navigationViewStyle(.stack)
17+
}
18+
```
19+
720
- Define sub view
21+
```swift
22+
struct SubView: View {
23+
24+
let text: String
25+
26+
var body: some View {
27+
Text("\(text)")
28+
}
29+
}
30+
```
31+
832
- Define routes
33+
```swift
34+
enum Router {
35+
case go1
36+
case go2
37+
case go3
38+
case empty
39+
40+
@ViewBuilder
41+
var builder: some View {
42+
switch(self) {
43+
case .go1: SubView(text: "go1")
44+
case .go2: SubView(text: "go2")
45+
case .go3: SubView(text: "go3")
46+
default: EmptyView()
47+
}
48+
}
49+
}
50+
```
951
- Define view modifire
52+
```swift
53+
struct NavigationModifire : ViewModifier{
54+
55+
@State var isActive : Bool = true
56+
57+
@Binding var route : Router
58+
59+
func body(content: Content) -> some View {
60+
content
61+
.background{
62+
NavigationLink(destination : route.builder, isActive: $isActive ){
63+
EmptyView()
64+
}.hidden()
65+
}
66+
.onChange(of: isActive){
67+
if $0 == false { route = .empty }
68+
}
69+
}
70+
71+
}
72+
73+
extension View{
74+
@ViewBuilder
75+
func navigation(route : Binding<Router>) -> some View{
76+
if route.wrappedValue != .empty{
77+
modifier(NavigationModifire(route: route))
78+
}else { self }
79+
}
80+
}
81+
```
82+
1083

11-
- Apply modifire

0 commit comments

Comments
 (0)