以下MKMapViewDelegate
的方法:
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
pinAnnotationView.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
pinAnnotationView.canShowCallout = true
return pinAnnotationView
}
如果我像上面那样做,那么整个视图都可以点亮:
否则:
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
let accessoryView = UIButton(frame: CGRectMake(0, 0, 25, 25))
accessoryView.setImage(UIImage(named: "icon-menu"), forState: .Normal)
pinAnnotationView.rightCalloutAccessoryView = accessoryView
pinAnnotationView.canShowCallout = false
return pinAnnotationView
}
只有右侧附件视图被点击,为什么?
问题是。怎样做才能使整个
MKPinAnnotationView
整合-match
而不仅仅是正确的披露?
答案 0 :(得分:3)
我仍在搜索为什么它适用于第一个代码块中的完整标注视图但不适用于第二个代码块。
我找到了如何使整个MKPinAnnotationView标注视图可以应用的答案。
基本上我们可以通过两种方法实现这一目标。
<强> 1。使用常规方法。
这里我使用的是 rightCalloutAccessoryView 的图片,但在声明按钮时发生了一些小变化。
std::istringstream
在这里声明按钮时我指定为 DetailDisclosure 类型。
<强> 2。第二种方法是使用UITapGestureRecognizer
这里我实现了两个callout委托方法,如下所示。
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let reuseIdentifier = "pin"
var pin = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView
if pin == nil {
pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
pin!.pinTintColor = UIColor.redColor()
pin!.canShowCallout = true
let button = UIButton(type: .DetailDisclosure)
button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
button.setBackgroundImage(UIImage(named: "img.png"), forState: .Normal)
pin!.rightCalloutAccessoryView = button
} else {
pin!.annotation = annotation
}
return pin
}