在 MapKit 中禁用 Mylocation Marker Tap Swift

Disable Mylocation Marker Tap in MapKit Swift

我正在 Apple 地图中添加 MKAnnotationView 并在 annotationView.But 中创建点击事件 Mylocation 标记正在与 annotationView tap.How 交互以克服此问题 problem.Hope 你了解我的 problem.Thanks提前。

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    var annotationView = MKAnnotationView()

    guard let annotation = annotation as? ClientLocation
        else{
            return nil
    }
    if let dequedView = mapView.dequeueReusableAnnotationView(withIdentifier: annotation.identifier){
        annotationView = dequedView
    }
    else{
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotation.identifier)
    }
    ////////////////////////
    ///////////////////
    annotationView.rightCalloutAccessoryView = button
    annotationView.canShowCallout = true
    return annotationView
}

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
}

您可以使用 MKMapViewDelegate 中的委托方法 viewFor annotation 自定义注释视图。

编辑:

我只是想重现你的代码,让我怀疑的只是你的 class ClientLocation。如果你的 guard let return nil 你必须检查这个声明。

您需要做的是检查 class 来自您的代表的视图类型,例如:

if annotation.isKind(of: MKUserLocation.self) {
    // this means we are handling the blue point or the user location.
    //then you can set the parameters for this view like
    annotationView.canShowCallout = false

    // or even unable user to interact with
    annotationView.isUserInteractionEnabled = false
}

您的委托应如下所示:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?{
    var annotationView = MKAnnotationView()
    guard let annotation = annotation as? ClientLocation
        else{
            return nil
    }
    if let dequedView = mapView.dequeueReusableAnnotationView(withIdentifier: annotation.identifier){
        annotationView = dequedView
    }
    else{
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotation.identifier)
    }

    if annotation.isKind(of: MKUserLocation.self) {
        annotationView.isUserInteractionEnabled = false
    }
    ////////////////////////
    ///////////////////
    annotationView.rightCalloutAccessoryView = button
    annotationView.canShowCallout = true
    return annotationView
}

在你的代表身上

 public func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
        let userView = mapView.view(for: mapView.userLocation)
        userView?.isUserInteractionEnabled = false
        userView?.isEnabled = false
        userView?.canShowCallout = false
}

它对我有用。试试这个

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.userLocation.title = nil
}