默认标注视图内的按钮停止响应触摸
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
。无论地图是否始终放大,我在标注按钮中的图像都是交互式的。多么奇怪的场景,但它运行得很好。
所以我有一张带有大量注释的地图。每个注释都有默认的标注视图,并附有一个我创建的按钮,据说可以将用户带到另一个视图控制器。这个按钮起初工作正常,但对于某些注释,它不会记录触摸,除非我放大注释或再次单击注释。我很迷茫。这是我的代码。
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
。无论地图是否始终放大,我在标注按钮中的图像都是交互式的。多么奇怪的场景,但它运行得很好。