SwiftUI NavigationLink 弹出

Posted

技术标签:

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

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

【问题讨论】:

查看本教程ryanashcraft.me/swiftui-programmatic-navigation 这是一个重复的问题。请参阅我对这个问题的回答:***.com/questions/56513568/… 【参考方案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 所做的那样。

【讨论】:

以上是关于SwiftUI NavigationLink 弹出的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:NavigationLink 在变量更新时弹出

SwiftUI:如果在 ForEach 中使用 NavigationLink 会立即弹出

SwiftUI:在 Tabview 的 WatchOS 8.1RC 上立即弹出 NavigationLink

SwiftUI:NavigationLink 奇怪的行为

SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?

NavigationLink 中的 SwiftUI 按钮