如何检测在MapView中select了哪个注释

我在地图中做了一些注释,当我点击它们时,我看到了一些信息,而且我有一个打开地图的button,并且我不能接受的正确信息应该画出我的路线。

这是我的代码:

我有我的纬度和经度的双数组的2我从我的查询填充他们。

var lat = [Double]() var lon = [Double]() 

这些行用于填充注释

 self.annot = Islands(title: object["name"] as! String, subtitle: object["address"] as! String, coordinate: CLLocationCoordinate2D(latitude: (position?.latitude)!, longitude: (position?.longitude)!), info: object["address"] as! String) self.map.addAnnotations([self.annot]) 

这是注释创build的地方:

 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { let identifier = "pin" if annotation.isKindOfClass(MKUserLocation) { return nil } let image = UIImage(named: "car") let button = UIButton(type: .Custom) button.frame = CGRectMake(0, 0, 30, 30) button.setImage(image, forState: .Normal) button.addTarget(self, action: #selector(Map.info(_:)), forControlEvents:UIControlEvents.TouchUpInside) var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) if annotationView == nil { annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin") annotationView!.canShowCallout = true annotationView!.image = UIImage(named: "annotation") annotationView!.rightCalloutAccessoryView = button } else { annotationView!.annotation = annotation } return annotationView } 

最后,这是button的function,我应该通过正确的信息(和问题的地方)

  func info(sender: UIButton) { let latitute:CLLocationDegrees = lat[sender.tag] let longitute:CLLocationDegrees = lon[sender.tag] let regionDistance:CLLocationDistance = 10000 let coordinates = CLLocationCoordinate2DMake(latitute, longitute) let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) let options = [ MKLaunchOptionsMapCenterKey: NSValue(MKCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(MKCoordinateSpan: regionSpan.span) ] let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) let mapItem = MKMapItem(placemark: placemark) mapItem.name = name[sender.tag] print(sender.tag) mapItem.openInMapsWithLaunchOptions(options) } 

正如你所看到的我尝试与发件人标签,但没有运气。

编辑:我的自定义注释类

 class Islands: NSObject, MKAnnotation { var title: String? var addr: String? var coordinate: CLLocationCoordinate2D var info: String? var subtitle: String? init(title: String, subtitle: String, coordinate: CLLocationCoordinate2D, info: String) { self.title = title self.coordinate = coordinate self.info = info self.subtitle = subtitle } } 

为此,您可以使用didSelectAnnotationView选定Annotation ,然后将该注释存储到实例variables中,然后在Button操作方法中使用注释。

 var selectedAnnotation: MKPointAnnotation? func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) { self.selectedAnnotation = view.annotation as? MKPointAnnotation } func info(sender: UIButton) { print(selectedAnnotation?.coordinate) } 

编辑:由于你有自定义的MKAnnotation类,你需要使用它。

 var selectedAnnotation: Islands? func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) { self.selectedAnnotation = view.annotation as? Islands }