获取 MKPointAnnotation 标题
Posted
技术标签:
【中文标题】获取 MKPointAnnotation 标题【英文标题】:Get MKPointAnnotation title 【发布时间】:2014-09-28 17:16:29 【问题描述】:我创建了一个 MKMapView,其中包含地图上的几个 MKPointAnnotations。当用户单击视图中的 UIButton 时,我想在日志中打印标题。我怎样才能做到这一点?到目前为止,我有这个:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!
if annotation is MKUserLocation
//return nil so map view draws "blue dot" for standard user location
return nil
let reuseId = "pin"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if pinView == nil
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
pinView!.pinColor = .Purple
var rightButton: AnyObject! = UIButton.buttonWithType(UIButtonType.DetailDisclosure)
//MapPointAnnotation *point = (MapPointAnnotation*)pinView.annotation;
//rightButton.venue = point.venue;
rightButton.titleForState(UIControlState.Normal)
rightButton.addTarget(self, action: "rightButtonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
pinView!.rightCalloutAccessoryView = rightButton as UIView
else
pinView!.annotation = annotation
return pinView
func rightButtonTapped(sender: AnyObject)
【问题讨论】:
【参考方案1】:在自定义rightButtonTapped
方法中,获取对已点击注释的引用的一种简单可靠的方法是使用地图视图的selectedAnnotations
数组:
func rightButtonTapped(sender: AnyObject)
if self.mapView.selectedAnnotations?.count == 0
//no annotation selected
return;
if let ann = self.mapView.selectedAnnotations[0] as? MKAnnotation
println("\(ann.title!)")
(尽管selectedAnnotations
是一个数组,但地图视图一次只允许“选择”一个注释,因此当前选定的注释始终位于索引 0 处。)
但是,比使用自定义按钮方法更好的方法是使用地图视图的calloutAccessoryControlTapped
委托方法。委托方法将向您传递对已点击的注释视图的引用,您可以从中轻松获取底层注释。
要使用委托方法,删除您的自定义方法的 addTarget
行:
//Do NOT call addTarget if you want to use the calloutAccessoryControlTapped
//delegate method instead of a custom button method.
//rightButton.addTarget(self, action: "rightButtonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
然后实现委托方法而不是您的自定义按钮方法:
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!)
println("\(view.annotation.title!)")
【讨论】:
以上是关于获取 MKPointAnnotation 标题的主要内容,如果未能解决你的问题,请参考以下文章
MKPointAnnotation 不再在 iOS 11 中显示标题