gpt4 book ai didi

swiftui - 如何在 SwiftUI 中放松到 MainView

转载 作者:行者123 更新时间:2023-12-03 14:54:49 27 4
gpt4 key购买 nike

如果不显示第二个 NavigationView,我找不到从 ViewB 转到 ContentView 的方法在另一个之上NavigationView .

struct ContentView: View {
var body: some View {
NavigationView{
VStack {
Text("Go to ViewA")
NavigationLink(destination: ViewA()) {Text("Go")}
}.navigationBarTitle("ContentView")
}
}
}

struct ViewA: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Go to ViewB")
NavigationLink(destination: ViewB()) {Text("Go to B")}
Text("Go back")
Button(action: { self.presentationMode.wrappedValue.dismiss() }) {Text("Go to ContentView")}
}.navigationBarTitle("ViewA")
}
}

struct ViewB: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Go Home")
NavigationLink(destination: ContentView()) {Text("Go")}
Text("Go back")
Button(action: { self.presentationMode.wrappedValue.dismiss() }) {Text("Go to ViewB")}
}.navigationBarTitle("ViewB")
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

在“旧” swift 我可以很容易地做一个 unwindSegue 像
@IBAction func unwindToVCMain(segue:UIStoryboardSegue) { }
}

并轻松地将其称为
performSegue(withIdentifier: "unwindToVcMain", sender: nil)

enter image description here

最佳答案

使用 Swiftui NavigationLink
首先,将您的第一个 View 嵌入到导航 Controller 中。
然后插入一个导航链接到下一个 View 。 NavigationLink 有不同的初始化程序。
isActive 选择这个范围:
ScreenshotNavLink
一开始有点令人费解,但是 isActive NavigationLink 中的参数变成 true当点击链接并且导航移动到下一个屏幕时。

It creates an instance that presents a destination when active


如果我传递了一个跟踪此属性状态的绑定(bind),如果在我后续的 View 链中的任何时候我再次将其设置为 false,它将重置并返回到原始屏幕!它很整洁!
请参阅代码中的这个简短示例:
struct ContentView: View {
@State private var isActive: Bool = false

var body: some View {
NavigationView {
NavigationLink(
destination: SecondView(isActive: $isActive),
isActive: $isActive,
label: {
Text("Go to second View")
})
.navigationTitle("MainView")
}
}
}
我的第二个观点:
struct SecondView: View {
@Binding var isActive: Bool

var body: some View {
NavigationLink("Go to Third View",destination: ThirdView(isActive: $isActive))
.navigationTitle("Second View")
}
}

这里是放松按钮,但它可以在任何 View 中。
设置 isActive = false在这里做一些魔术!
struct ThirdView: View {
@Binding var isActive: Bool

var body: some View {
Button("Unwind!"){
isActive = false
}
.navigationTitle("Last View!")
}
}

关于swiftui - 如何在 SwiftUI 中放松到 MainView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59479536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com