Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

custom navigation swiftui navigation link swiftui routing

swiftuiux/d3-custom-navigation-swiftui

Repository files navigation

Custom navigation swiftui

Experimenting with navigation link. if you find this idea interesting you can take and expend it into a more powerful solution. Live youtube

The result navigation

 @State var route : Router = .empty
 var body: some View {
 NavigationView{
 VStack{
 Button("go1") { route = .go1}
 Button("go2") { route = .go2}
 Button("go3") { route = .go3}
 }.navigation(route: $route)
 
 }.navigationViewStyle(.stack)
 }

1. Define sub view

struct SubView: View {
 let text: String
 var body: some View {
 Text("\(text)")
 }
}

2. Define routes

enum Router {
 case go1
 case go2
 case go3
 case empty
 @ViewBuilder
 var builder: some View {
 switch(self) {
 case .go1: SubView(text: "go1")
 case .go2: SubView(text: "go2")
 case .go3: SubView(text: "go3")
 default: EmptyView()
 }
 }
}

3. Define view modifier

struct NavigationModifire : ViewModifier{
 
 @State var isActive : Bool = true
 
 @Binding var route : Router
 
 func body(content: Content) -> some View {
 content
 .background{
 NavigationLink(destination : route.builder, isActive: $isActive ){
 EmptyView()
 }.hidden()
 }
 .onChange(of: isActive){
 if 0ドル == false { route = .empty }
 }
 }
 
}
extension View{
 @ViewBuilder
 func navigation(route : Binding<Router>) -> some View{
 if route.wrappedValue != .empty{
 modifier(NavigationModifire(route: route))
 }else { self }
 }
}

AltStyle によって変換されたページ (->オリジナル) /