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?
11
votes
Check this Tutorial ryanashcraft.me/swiftui-programmatic-navigation
– Ketan Odedra
This a a duplicate question. See my answer to this question: stackoverflow.com/questions/56513568/…
– Chuck H
3 Answers
13
votes
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")
}
}
}
12
votes
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")
}
}
}
1
votes
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.