【发布时间】:2014-12-20 09:32:04
【问题描述】:
我有一个带有注释的地图,单击图钉后,标注显示带有注释标题和一个披露按钮。当我点击按钮时,segue 被触发,我移动到另一个视图。如何确定点击了哪些注释,或将标题传递给另一个视图。
func mapView(mapView: MKMapView!,
viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is MKUserLocation{
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 = .Red
var calloutButton = UIButton.buttonWithType(.DetailDisclosure) as UIButton
pinView!.rightCalloutAccessoryView = calloutButton
} else {
pinView!.annotation = annotation
}
return pinView!
}
func mapView(mapView: MKMapView!, annotationView: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if control == annotationView.rightCalloutAccessoryView {
performSegueWithIdentifier("Detail", sender: self)
}
}
谢谢
【问题讨论】:
-
在 calloutAccessoryControlTapped 中,annotationView.annotation 会给你注解对象。调用 performSegue 时,将 sender 设置为 annotationView 而不是 self。请参阅stackoverflow.com/questions/14805954/… 获取示例(它在 Objective-C 中,但转换为 Swift 应该不会太难)。我不推荐使用标签的方式。
标签: ios swift annotations mapkit callouts