我在地图中做了一些注释,当我点击它们时,我看到一些信息,我有一个按钮打开地图,并且有正确的信息我不能接受它应该画我的路线.
这是我的代码:
我的lat和amp有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])
这是注释创建的位置:
- 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,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
- }
最后这是按钮的功能,我应该传递正确的信息(以及问题出在哪里)
- 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中的选定注释,然后将该注释存储到实例变量,然后在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
- }