SwiftUI 导航回上层视图而不是根视图
SwiftUI navigate back to upper but not root view
我有四个这样的页面:
- 第 1 页
- 第 2 页
- 第 3 页
- 第 4 页
我根据状态布尔值在页面之间导航。我希望通过单击第 4 页上的按钮从第 4 页导航回第 2 页。
这是我的:
import SwiftUI
struct Page1View: View {
@State var gotoPage2 = false
var body: some View {
NavigationView {
Button("Goto Page 2") {
gotoPage2 = true
}
.navigationTitle("Page 1")
.background(
NavigationLink(
destination: Page2View(),
isActive: $gotoPage2,
label: {EmptyView()}
)
)
}
}
}
struct Page2View: View {
@State var gotoPage3 = false
var body: some View {
Button("Goto Page 3") {
gotoPage3 = true
}
.navigationTitle("Page 2")
.background(
NavigationLink(
destination: Page3View(
gotoPage3: $gotoPage3
),
isActive: $gotoPage3,
label: {EmptyView()}
)
)
}
}
struct Page3View: View {
@State var gotoPage4 = false
@Binding var gotoPage3: Bool
var body: some View {
Button("Goto Page 4") {
gotoPage4 = true
}
.navigationTitle("Page 3")
.background(
NavigationLink(
destination: Page4View(
gotoPage3: $gotoPage3
),
isActive: $gotoPage4,
label: {EmptyView()}
)
)
}
}
struct Page4View: View {
@Binding var gotoPage3: Bool
var body: some View {
Button("Go Back to Page 2") {
gotoPage3 = false
}
.navigationTitle("Page 4")
}
}
预期行为
当点击“返回第 2 页”时,NavigationView 导航回到第 2 页
实际行为
什么都没发生
观察结果
如果第 2 页是根视图,则此代码按预期工作。但是,我需要导航到不是根视图的页面
添加到 Page3View 中的 NavigationLink .isDetailLink(false)
- 应该会有帮助。
struct Page3View: View {
@State var gotoPage4 = false
@Binding var gotoPage3: Bool
var body: some View {
Button("Goto Page 4") {
gotoPage4 = true
}
.navigationTitle("Page 3")
.background(
NavigationLink(
destination: Page4View(gotoPage3: $gotoPage3),
isActive: $gotoPage4,
label: { EmptyView() }
)
.isDetailLink(false)
)
}
}
我有四个这样的页面:
- 第 1 页
- 第 2 页
- 第 3 页
- 第 4 页
我根据状态布尔值在页面之间导航。我希望通过单击第 4 页上的按钮从第 4 页导航回第 2 页。
这是我的:
import SwiftUI
struct Page1View: View {
@State var gotoPage2 = false
var body: some View {
NavigationView {
Button("Goto Page 2") {
gotoPage2 = true
}
.navigationTitle("Page 1")
.background(
NavigationLink(
destination: Page2View(),
isActive: $gotoPage2,
label: {EmptyView()}
)
)
}
}
}
struct Page2View: View {
@State var gotoPage3 = false
var body: some View {
Button("Goto Page 3") {
gotoPage3 = true
}
.navigationTitle("Page 2")
.background(
NavigationLink(
destination: Page3View(
gotoPage3: $gotoPage3
),
isActive: $gotoPage3,
label: {EmptyView()}
)
)
}
}
struct Page3View: View {
@State var gotoPage4 = false
@Binding var gotoPage3: Bool
var body: some View {
Button("Goto Page 4") {
gotoPage4 = true
}
.navigationTitle("Page 3")
.background(
NavigationLink(
destination: Page4View(
gotoPage3: $gotoPage3
),
isActive: $gotoPage4,
label: {EmptyView()}
)
)
}
}
struct Page4View: View {
@Binding var gotoPage3: Bool
var body: some View {
Button("Go Back to Page 2") {
gotoPage3 = false
}
.navigationTitle("Page 4")
}
}
预期行为 当点击“返回第 2 页”时,NavigationView 导航回到第 2 页
实际行为 什么都没发生
观察结果 如果第 2 页是根视图,则此代码按预期工作。但是,我需要导航到不是根视图的页面
添加到 Page3View 中的 NavigationLink .isDetailLink(false)
- 应该会有帮助。
struct Page3View: View {
@State var gotoPage4 = false
@Binding var gotoPage3: Bool
var body: some View {
Button("Goto Page 4") {
gotoPage4 = true
}
.navigationTitle("Page 3")
.background(
NavigationLink(
destination: Page4View(gotoPage3: $gotoPage3),
isActive: $gotoPage4,
label: { EmptyView() }
)
.isDetailLink(false)
)
}
}