Congruent Tech. UG
Congruent Tech. UG

Reputation: 1578

SwiftUI NavigationLink pop

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?

Upvotes: 24

Views: 18706

Answers (4)

Guenhwyvar
Guenhwyvar

Reputation: 61

If you use:

@Environment(\.dismiss) var dismiss

ā€¦ in the view that is your destination, then you can call:

dismiss()

ā€¦ where you want from within that view.

Example:

import SwiftUI

struct MainView: View {

var body: some View {
    NavigationLink(destination: SecondView()){
            Text("Push to Destination View")
        }
    }
}


struct DestinationView : View{
    @Environment(\.dismiss)

     var body : some View {    
        Button(action:{ self.dismiss() }){
             Text("Go Back")    
         }    
     }
 }

Upvotes: 6

sachin jeph
sachin jeph

Reputation: 209

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

Upvotes: 14

Sapar Friday
Sapar Friday

Reputation: 762

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

Upvotes: 39

tomEngland
tomEngland

Reputation: 103

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.

Upvotes: 1

Related Questions