我正在使用NavigationView
中的NavigationLink
来导航屏幕。
如何从导航堆栈中删除屏幕?
不仅仅是隐藏导航“返回”按钮,而是完全从堆栈中删除屏幕?
例如,我有如下屏幕链:A -> B -> C
如何删除屏幕B
以从C
返回到A
?
或者,另一个例子,如何删除屏幕A
和B
,使C
屏幕成为根?
或者,所有这些都无法在SwiftUI的概念下实现吗?
我正在使用NavigationView
中的NavigationLink
来导航屏幕。
如何从导航堆栈中删除屏幕?
不仅仅是隐藏导航“返回”按钮,而是完全从堆栈中删除屏幕?
例如,我有如下屏幕链:A -> B -> C
如何删除屏幕B
以从C
返回到A
?
或者,另一个例子,如何删除屏幕A
和B
,使C
屏幕成为根?
或者,所有这些都无法在SwiftUI的概念下实现吗?
enum RootView {
case A, C
}
struct ContentView : View {
@State private var rootView : RootView = .A
var body: some View {
NavigationView {
switch rootView {
case .A:
ViewA(rootView: $rootView)
case .C:
ViewC(rootView: $rootView)
}
}.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ViewA : View {
@Binding var rootView : RootView
var body: some View {
VStack {
Text("View A")
NavigationLink(destination: ViewB(rootView: $rootView)) {
Text("Navigate to B")
}
}
}
}
struct ViewB : View {
@Binding var rootView : RootView
var body: some View {
VStack {
Text("View B")
NavigationLink(destination: ViewC(rootView: $rootView)) {
Text("Navigate to C")
}
Button(action: {
rootView = .C
}) {
Text("Navigate to C as root view")
}
}
}
}
struct ViewC : View {
@Binding var rootView : RootView
var body: some View {
VStack {
Text("View C")
switch rootView {
case .A:
Button(action: {
rootView = .C
}) {
Text("Switch this to the root view")
}
case .C:
Text("I'm the root view")
}
}
}
}
SwiftUI 中有一个名为 NavigationStack 的新元素,它允许您以任何您想要的方式操作堆栈。我已经在演示项目中进行了尝试,并试图以可维护和程序化的方法在 SwiftUI 中使用协调器。