SwiftUI 导航链接弹出

Ara*_*ash 10 navigation swiftui

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

小智 12

是的,您现在可以使用以下代码以编程方式弹出 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")

    }

   }
}
Run Code Online (Sandbox Code Playgroud)


Sap*_*day 12

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

@Environment(\.presentationMode) var presentationMode
self.presentationMode.wrappedValue.dismiss()
Run Code Online (Sandbox Code Playgroud)

例子:

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")    
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)


Gue*_*var 5

如果您使用:

\n
@Environment(\\.dismiss) var dismiss\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 在你的目的地视图中,然后你可以调用:

\n
dismiss()\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 您想要在该视图中的位置。

\n

例子:

\n
import SwiftUI\n\nstruct MainView: View {\n\nvar body: some View {\n    NavigationLink(destination: SecondView()){\n            Text("Push to Destination View")\n        }\n    }\n}\n\n\nstruct DestinationView : View{\n    @Environment(\\.dismiss)\n\n     var body : some View {    \n        Button(action:{ self.dismiss() }){\n             Text("Go Back")    \n         }    \n     }\n }\n
Run Code Online (Sandbox Code Playgroud)\n