我已经使用 NavigationLink
导航到一个新视图,我想以编程方式跳回我所在的位置。在 swiftUI 中还可能吗?我知道对于模态表示,我们可以使用.isPresented
环境值,但是导航呢?
您实际上可以简单地创建自定义后退按钮。只有两行代码 🔥
@Environment(.presentationMode) var presentationMode
self.presentationMode.wrappedValue.dismiss()
例:
import SwiftUI
struct FirstView: View {
@State var showSecondView = false
var body: some View {
NavigationLink(destination: SecondView(),isActive : self.$showSecondView){
Text("Push to Second View")
}
}
}
struct SecondView : View{
@Environment(.presentationMode) var presentationMode
var body : some View {
Button(action:{ self.presentationMode.wrappedValue.dismiss() }){
Text("Go Back")
}
}
}
您现在可以使用以下代码以编程方式弹出导航链接视图:
import SwiftUI
struct MainViewer: View {
@State var showView = false
var body: some View {
NavigationLink(destination: DestView(showView: self.$showView),
isActive: self.$showView) {
Text("Push View")
}
}
}
struct DestView: View {
@Binding var showView: Bool
var body: some View {
Button(action: {self.showView = false}) {
Text("Pop Screen")
}
}
}
如果您使用:
@Environment(.dismiss) var dismiss
。在作为您的目的地的视图中,您可以调用:
dismiss()
。您希望从该视图中的位置。
例:
import SwiftUI
struct MainView: View {
var body: some View {
NavigationLink(destination: SecondView()){
Text("Push to Destination View")
}
}
}
struct DestinationView : View{
@Environment(.dismiss)
var body : some View {
Button(action:{ self.dismiss() }){
Text("Go Back")
}
}
}
这目前一定是一个错误。 Apple 提供了样板代码,以允许导航视图"详细信息视图"中内置的"后退"或"弹出"功能。 我唯一的猜测是,苹果正在解决在后端的SwiftUI中完全实现Combing以实现"推送"和"弹出"类型的操作的问题。我无法想象 SwiftUI 在测试版中没有此功能比创建一个联合发布者来更新类似于 RyanAshcraft 上面所做的状态更容易访问。