I have a NavigationView
and it has 3 views I want to navigate to successively. Each view has a NavigationLink
within it. Ideally, I want:
View 1 -> View 2 -> View 3
But what I get is: View 1 -> View 2 -> View 3 (1sec) -> View 1
I am using the tagged selection method for the NavigationLink
, and the selection is from a @Published
EnvironmentObject
.
Here's the code:
import SwiftUI
struct ContentView: View {
@EnvironmentObject var viewModel: ViewModel
var body: some View {
VStack {
NavigationLink(destination: secondPage(), tag: "View 2", selection: $viewModel.selection) {
Button(
action: {
viewModel.selection = "View 2"
}, label: {
Text("view 2")
}
)
.navigationTitle("View 1")
}
.isDetailLink(false)
}
}
}
struct secondPage: View {
@EnvironmentObject var viewModel: ViewModel
var body: some View {
NavigationLink(destination: thirdPage(), tag: "View 3", selection: $viewModel.selection) {
Button(
action: {
viewModel.selection = "View 3"
},
label: {
Text("View 3")
}
)
.navigationTitle("View 2")
}
.isDetailLink(false)
}
}
struct thirdPage: View {
var body: some View {
VStack {
Text("third page")
}
.navigationTitle("View 3")
}
}
class ViewModel: ObservableObject {
@Published var selection: String? = nil
}
import SwiftUI
@main
struct testApp: App {
@StateObject var viewModel = ViewModel()
var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
}
.navigationViewStyle(StackNavigationViewStyle())
.environmentObject(viewModel)
}
}
}
I use a button and the viewModel because in my real code I need the code to perform an action.
Help would be so appreciated!