I am using MapView this way (the code is of course simplified):
struct IkMapView: UIViewRepresentable {
var mapView = MKMapView()
func makeUIView(context: Context) -> MKMapView {
mapView.delegate = context.coordinator
return mapView
}
public func unselectAllSpots() {
// mapView is useless and not the actual map view I am seeing
for annotation in mapView.annotations {
mapView.deselectAnnotation(annotation, animated: false)
}
}
func updateUIView(_ view: MKMapView, context: Context) {
// this view is good
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, MKMapViewDelegate, UIGestureRecognizerDelegate {
var parent: IkMapView
init(_ parent: IkMapView) {
self.parent = parent
super.init()
}
}
}
I would like to expose a few public functions to allow actions from the parent view, for example, here, it is the unselectAllSpots() function. However, when I call it from the parent, the mapView is not the same one as the one I get through updateUIView(), and it doesn't actually impact the map. I have read somewhere that the actual displayed mapView is not that instance (but the instance we get in updateUIView().
What's the best way to solve this? I could transform my struct into a class and create a new MKMapView property which I would associate to the map view I get through updateUIView but that doesn't feel right at all.
Thanks a lot for your help :)