SwiftUI 导航链接弹出



我已经使用 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 上面所做的状态更容易访问。

相关内容

  • 没有找到相关文章

最新更新