Here is my SwiftUI setup:
I have a SwiftUI view (called MapSearchView) that has a NavigationView that contains a NavigationLink.
var body: some View {
VStack {
NavigationView {
Form {
Section (header: Text("Location")){
NavigationLink (locationString, destination: GooglePlacesViewController(mapTools: $mapTools))
}...
The NavigationLink's destination is a UIViewControllerRepresentable which wraps a GooglePlacesViewController. When I am done with my GooglePlaces search (either because I made a selection or I cancelled the search), I want to programmatically pop back to the MapSearchView.
I have tried adding the following in the UIViewControllerRepresentable (GooglePlacesViewController):
@Environment(\.presentationMode) var presentationMode
var popToPrevious : Bool = false {
didSet {
if popToPrevious == true {
self.presentationMode.wrappedValue.dismiss()
}
}
}
and setting the popToPrevious to true in my Coordinator using
parent.popToPrevious = true
It does get called, but does nothing.
I have also tried in the Coordinator to call
view.viewController().navigationController.popViewController(animated: true)
(viewController() is an extension that gets the viewController for any view)
This also does nothing.
Ideas?
If you create Coordinator with owner view (ie. your representable), then try to call directly when needed
ownerView.presentationMode.wrappedValue.dismiss()