Как добавить обратный вызов в MKAnnotationView? - PullRequest
1 голос
/ 29 марта 2019

Мне нужно добавить прослушиватель кликов для всех annotationView. Этот слушатель открывает другой контроллер представления. Я написал этот код:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let selected = (view.annotation as? CustomAnnotation) {
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped(sender:)))
        view.addGestureRecognizer(tapGestureRecognizer)
        self.selectedAnnotation = selected
    }
}
@objc func tapped(sender: UITapGestureRecognizer)
{
    if let controller = DetailsController.storyboardInstance(){
        if let selectedAnnotation = selectedAnnotation{
            controller.selectedAnnotation = selectedAnnotation
            mapView.deselectAnnotation(selectedAnnotation, animated: false)
        }
        self.present(controller, animated:true, completion:nil)
    }
}

tapped слушатель открывает другой контроллер представления. Но когда я отклоняю это представление, контроллер MkAnnotationView все еще выбран. Как закрыть это? Есть ли другой способ добавить обратный вызов ко всему MkAnnotationView?

Ответы [ 2 ]

0 голосов
/ 30 марта 2019
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    if view.annotation is MKClusterAnnotation
    {
      view.setSelected(false, animated: false)
      return
    }

 customview = UINib(nibName: "CustomViewForAnnotation", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomViewForAnnotation
 customview.initialize(textForCell: "Spacious #3BHK #Flat sale in ABA Cleo County #Sector121 #Noida 201307 #Apartment #ForSale #Residential #Property", placeName: "fgfvf", cellCount: 2)

    customview.loadCell(customview)

    view.addSubview(customview)

    }



   func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
    customview.removeFromSuperview()
   }
0 голосов
/ 30 марта 2019

Использование MKAnnotationView.setSelected(_:animated:)

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    ...
    view.setSelected(false, animated: false)
}

Или MKMapView.deselectAnnotation(_:animated:)

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let selected = view.annotation as? CustomAnnotation {
        ...
        mapView.deselectAnnotation(selected, animated: false)
    }
}

Update-1

if let annotationView = mapView.view(for: selected) {
    annotationView.setSelected(false, animated: false)
}
...