停止mapkit自定义MKAnnotationView即时消失

时间:2017-11-12 04:31:14

标签: ios swift mapkit mkannotationview

我目前在地图标注中设置了自定义MKAnnotationView,并且运行良好。但是我想在callout视图中添加一个按钮,但是当我点击按钮时它会在调用之前关闭注释视图。我怎么能绕过这个?

以下是我的代码的相关内容: 在我对注释的看法中:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) ->    MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }

    let reuseId = "mapReuseId"
    var mapView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
    if mapView == nil {
        mapView = MKAnnotationView(annotation: annotation as! Annotation, reuseIdentifier: reuseId)
        mapView!.canShowCallout = false
    } else {
        mapView!.annotation = annotation as! Annotation
    }
    mapDottView!.image = customImage

    return mapDottView
}

在我的didSelect委托中:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    let callOut = customCallOutView(with: data)
    view.addSubview(callOut)
    // some layout here
}

customCallOutView很长,但重要的是它有一个永远不会被调用的UIButton。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

点击按钮时可以尝试延迟。 您可以使用Grand Central DispatchPerform Selector After Delay

// Do what you need to do when your button was tapped.
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
  // Dismiss your annotation.
}

答案 1 :(得分:0)

请尝试以下代码:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) ->    MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }

    let reuseId = "mapReuseId"
    var mapView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
    if mapView == nil {
        mapView = MKAnnotationView(annotation: annotation as! Annotation, reuseIdentifier: reuseId)
        mapView!.canShowCallout = true
        let rightButton: AnyObject! = UIButton(type: UIButtonType.detailDisclosure)
        pinView?.rightCalloutAccessoryView = rightButton as? UIView
    } else {
        mapView!.annotation = annotation as! Annotation
    }
    mapDottView!.image = customImage

    return mapDottView
}


func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    print(#function)
    // this method will be called when the button is tapped.
    // annotation view doesn't disappear
}