File tree Expand file tree Collapse file tree 1 file changed +73
-1
lines changed Expand file tree Collapse file tree 1 file changed +73
-1
lines changed Original file line number Diff line number Diff line change 4
4
### Experimenting with navigation link. if you find this idea interesting you can expend it into more powerful solution.
5
5
6
6
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
+
7
20
- 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
+
8
32
- 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
+ ```
9
51
- 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
+
10
83
11
- - Apply modifire
You can’t perform that action at this time.
0 commit comments