How to loop and place map markers with MKAnnotationView

From core data I generate data for map marker pins. When user selects a marker pin I display the data in a popup label with multiple rows, when I click on the pin. This is working for one marker pin. Now, I need to iterate over a list and generate several of those markers each with unique popup label data. The code:


struct MapView: UIViewRepresentable {
    var annotationOnTap: (_ title: String) -> Void
 
    @Binding var pins: [GpsData.MyEndPt]
    let key: String

    private static var mapViewStore = [String : MKMapView]()
    
    func makeUIView(context: Context) -> MKMapView {
        if let mapView = MapView.mapViewStore[key] {
            mapView.delegate = context.coordinator
            return mapView
        }
        let mapView = MKMapView(frame: .zero)
        mapView.delegate = context.coordinator
        MapView.mapViewStore[key] = mapView
        return mapView
    }

    func updateUIView(_ uiView: MKMapView, context: Context) {
        uiView.addAnnotations(pins)
    }

    func makeCoordinator() -> MapCoordinator {
        MapCoordinator(self)
    }
   
    
    final class MapCoordinator: NSObject, MKMapViewDelegate {

        var parent: MapView
        init(_ parent: MapView) {
            self.parent = parent
        }
        
 

        func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
            let PINID:String = "MyEndPoint"
            var mPin: MKMarkerAnnotationView? = nil
            let subtitleView = UILabel()
            subtitleView.font = subtitleView.font.withSize(12)
            subtitleView.numberOfLines = 0
            
            if (mPin == nil ) {
                mPin = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: PINID)
                mPin?.canShowCallout = true
            } else{
                mPin?.annotation = annotation
            }
            mPin?.leftCalloutAccessoryView = nil
            let btn = UIButton(type: .detailDisclosure)
            mPin?.rightCalloutAccessoryView = btn
            
            let zip:String = "77065"
            let formattedSalesStr:String = "100"
            let totalTargetText:String = "500"
           
            let paddedLoad = formattedSalesStr.padding(toLength: 50, withPad: " ", startingAt: 0)
            let paddedCapacity = totalTargetText.padding(toLength: 50, withPad: " ", startingAt: 0)
            
            subtitleView.text = "Total sales: "
            subtitleView.text! += paddedLoad
            subtitleView.text! += " \r\n"
            subtitleView.text! += "Total Target: "
            subtitleView.text! += paddedCapacity
            subtitleView.text! += " \r\n"
            subtitleView.text! += paddedzip
            
            mPin!.detailCalloutAccessoryView = subtitleView
            
            return mPin!
        }

        
    }
    
}

As you can see in the above method I have hardcoded values for my popup marker label. So I tried to iterate over the @Binding pins, populate each mPin, and return an array of MKAnnotationView, like this:

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> [MKAnnotationView] {
            let PINID:String = "MyEndPoint"
            var i:Int = 1
            var mPins = [MKAnnotationView]()
            for detail in self.parent.pins {
                var mPin: MKMarkerAnnotationView? = nil
                let subtitleView = UILabel()
                subtitleView.font = subtitleView.font.withSize(12)
                subtitleView.numberOfLines = 0
                
                if (mPin == nil ) {
                    mPin = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: PINID)
                    mPin?.canShowCallout = true
                } else{
                    mPin?.annotation = annotation
                }
                mPin?.leftCalloutAccessoryView = nil
                let btn = UIButton(type: .detailDisclosure)
                mPin?.rightCalloutAccessoryView = btn
                subtitleView.text! += String(i)
                subtitleView.text = "Total Load: "
                subtitleView.text! += String(detail.sales)
                subtitleView.text! += " \r\n"
                subtitleView.text! += "Total Target: "
                subtitleView.text! += String(detail.target)
                subtitleView.text! += " \r\n"
                i += 1
                // }
                
                mPin!.detailCalloutAccessoryView = subtitleView
                mPins.append(mPin!)

            }
            return mPins
        }

The marker pins show up, but then the label does not popup. How to fix this?

How to loop and place map markers with MKAnnotationView
 
 
Q