17

I have navigated to a new view with NavigationLink and I want to pop back to where I was programatically. Is it yet possible in swiftUI? I know for the modal presentation we could use the .isPresented environment value but how about navigation?

jpyams
  • 3,455
  • 5
  • 34
  • 59
Arash
  • 1,190
  • 1
  • 10
  • 20
  • 2
    Check this Tutorial https://ryanashcraft.me/swiftui-programmatic-navigation/ – Ketan Odedra Jul 15 '19 at 09:39
  • This a a duplicate question. See my answer to this question: https://stackoverflow.com/questions/56513568/ios-swiftui-pop-or-dismiss-view-programmatically/57279591#57279591 – Chuck H Aug 02 '19 at 22:45

3 Answers3

19

You can really simply create custom back button. Only two lines code

@Environment(\.presentationMode) var presentationMode
self.presentationMode.wrappedValue.dismiss()

Example:

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")    
        }    
    }
}
Sapar Friday
  • 492
  • 6
  • 7
14

Yes you can now programmatically pop a NavigationLink View using the following code:

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

    }

   }
}
sachin jeph
  • 199
  • 1
  • 4
1

This has to be a bug currently. Apple provides the boilerplate code to allow the "Back" or 'pop' functionality built in to a navigation view 'DetailView'. My only guess is Apple is working out the kinks in fully implementing Combine within SwiftUI in the backend to implement 'push' and 'pop' type of actions. I can't imagine SwiftUI coming out of beta without this functionality more accessible than creating a Combine publisher to update state similar to what RyanAshcraft did above.

tomEngland
  • 93
  • 1
  • 7