【问题标题】:SwiftUI NavigationLink popSwiftUI NavigationLink 弹出
【发布时间】:2019-11-23 23:21:37
【问题描述】:

我已使用NavigationLink 导航到一个新视图,我想以编程方式返回到我所在的位置。在swiftUI中还有可能吗?我知道对于模态演示,我们可以使用 .isPresented 环境值,但是导航呢?

【问题讨论】:

标签: navigation swiftui


【解决方案1】:

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

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

【讨论】:

    【解决方案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")
    
        }
    
       }
    }
    

    【讨论】:

      【解决方案3】:

      这一定是当前的错误。 Apple 提供样板代码以允许“返回”或“弹出”功能内置到导航视图“DetailView”中。我唯一的猜测是,Apple 正在解决在后端的 SwiftUI 中完全实现 Combine 以实现“推送”和“弹出”类型的操作的问题。我无法想象没有这个功能的 SwiftUI 会比创建一个组合发布者来更新状态更容易访问,就像上面 RyanAshcraft 所做的那样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-13
        • 2021-12-08
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多