How to show NavigationLink as a button in SwiftUI

后端 未结 8 2139
说谎
说谎 2021-01-31 14:39

I\'ve read a lot here about navigation in SwiftUI and tried a couple of things, but nothing is working as desired.

Basically, I have a view with a list of workouts and y

8条回答
  •  灰色年华
    2021-01-31 15:00

    You don't need to wrap your view inside the NavigationLink to make it trigger the navigation when pressed.

    We can bind a property with our NavigationLink and whenever we change that property our navigation will trigger irrespective of what action is performed. For example-

    struct SwiftUI: View {
        @State private var action: Int? = 0
    
        var body: some View {
        
            NavigationView {
                        VStack {
                            NavigationLink(destination: Text("Destination_1"), tag: 1, selection: $action) {
                                EmptyView()
                            }
                            NavigationLink(destination: Text("Destination_2"), tag: 2, selection: $action) {
                                EmptyView()
                            }
                            
                            Text("Your Custom View 1")
                                .onTapGesture {
                     //perform some tasks if needed before opening Destination view
                                    self.action = 1
                            }
                            Text("Your Custom View 2")
                                .onTapGesture {
                     //perform some tasks if needed before opening Destination view
                                    self.action = 2
                            }
                        }
                    }
            }
    }
    

    Whenever you change the value of your Bindable property (i.e. action) NavigationLink will compare the pre-defined value of its tag with the binded property action, if both are equal navigation takes place.

    Hence you can create your views any way you want and can trigger navigation from any view regardless of any action, just play with the property binded with NavigationLink.

    Thanks, hope it helps.

提交回复
热议问题