默认标注视图内的按钮停止响应触摸

Button inside default callout view stops responding to touches

所以我有一张带有大量注释的地图。每个注释都有默认的标注视图,并附有一个我创建的按钮,据说可以将用户带到另一个视图控制器。这个按钮起初工作正常,但对于某些注释,它不会记录触摸,除非我放大注释或再次单击注释。我很迷茫。这是我的代码。

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        var annotationView = MKAnnotationView()
        guard let annotation = annotation as? LocationAnnotation else {return nil}
        var identifier = ""
        switch annotation.type {
        case .nightclub:
            identifier = "Nightclub"
        case .hookahLounge:
            identifier = "Hookah Lounge"
        case  .bar:
            identifier = "Bar"
        case .bowling:
            identifier = "Bowling Alley"
        case .arcade:
            identifier = "Arcade"
        case .pool:
            identifier = "Pool"
        }
        if let dequedView = mapSF.dequeueReusableAnnotationView(withIdentifier: identifier) {
            annotationView = dequedView
        } else {
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        }
        annotationView.canShowCallout = true
        annotationView.isEnabled = true
        let button = UIButton()
        button.frame = CGRect(x: 0.0, y: 0.0, width: 30.0, height: 30.0)
        let image = UIImage(named: "go")
        button.setImage(image, for: .normal)
        annotationView.detailCalloutAccessoryView?.backgroundColor = UIColor.darkGray
        annotationView.rightCalloutAccessoryView = button
}

这里是 callout 附件功能,它最初有效但在随机时间无效。

      func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
             print("true button tapped")
    }

同样,我的问题是打印语句不会针对各种注释执行。每次我按下标注中的按钮时,我的控制台都会打印出该语句,但有时 not.I 不知道为什么。任何帮助将不胜感激,因为这是我的应用程序最后剩下的错误之一。

这对我来说有点老了,但我确实找到了解决方案。为了在我的标注中接收按钮上的触摸,我不得不简单地添加一行 annotationView.isUserInteractionEnabled = false。无论地图是否始终放大,我在标注按钮中的图像都是交互式的。多么奇怪的场景,但它运行得很好。