SwiftUI NavigationLink弹出

时间:2019-07-15 09:16:51

标签: navigation swiftui pop

我已使用NavigationLink导航到一个新视图,我想回到编程位置。 swiftUI还可以吗?我知道对于模式演示,我们可以使用.isPresented环境值,但是导航又如何呢?

3 个答案:

答案 0 :(得分:3)

您真的可以简单地创建自定义后退按钮。只有两行代码?

@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")    
        }    
    }
}

答案 1 :(得分:2)

是的,您现在可以使用以下代码以编程方式弹出NavigationLink视图:

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")

    }

   }
}

答案 2 :(得分:0)

当前必须是一个错误。 Apple提供了样板代码,以允许在导航视图“ DetailView”中内置“后退”或“弹出”功能。我唯一的猜测是,苹果公司正在努力在后端的SwiftUI中完全实现Combine,以实现“推送”和“ pop”类型的动作。我无法想象,如果没有此功能,SwiftUI会比Beta版更容易访问,而不是创建一个Combine发行商来更新类似于RyanAshcraft所做的状态。