ios – 如何检测在MapView中选择了哪个注释

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

这是我的代码:

我的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
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...