bad*_*din 8 swiftui swiftui-navigationlink swiftui-navigationview
我用来NavigationLink在NavigationView. 如何从导航堆栈中删除屏幕?不仅隐藏导航“后退”按钮,还从堆栈中完全删除屏幕?
例如,我有这样的屏幕链:A -> B -> C
如何删除屏幕B以返回C到A?
或者,另一个例子,如何删除 screenA和B,这样Cscreen 将成为根?
或者说这一切在 SwiftUI 的构想中都是不可能实现的?
就您的第一个问题(从C到A),这通常称为“弹出到根”,并且在此处有许多解决方案,包括:https ://stackoverflow.com/a/59662275/560942
您的第二个问题(替换A为C根视图)有点不同。您可以通过在视图层次结构中A替换为来做到这一点。C为了做到这一点,您需要有某种方式与父视图进行通信——我选择了一个简单的@State/@Binding来执行此操作,但可以使用ObservableObject或 甚至回调函数来代替。
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")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |