将onClick事件添加到MKAnnotation swift

时间:2017-04-03 18:20:55

标签: ios swift mkmapview mkannotation mkannotationview

我目前正在使用alamofire从Web请求获取一些位置,将它们存储在我的Object数组中,然后将它们显示在MKMapView上。

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    guard !(annotation is MKUserLocation) else {
        return nil
    }

    let annotationIdentifier = "AnnotationIdentifier"

    var annotationView: MKAnnotationView?
    if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
        annotationView = dequeuedAnnotationView
        annotationView?.annotation = annotation
    }
    else {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
        annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
    }

    if let annotationView = annotationView {
        annotationView.canShowCallout = true
        annotationView.image = UIImage(named: "atm_map_icon")
    }

    return annotationView
}

这里是我解析json,将结果放入数组并循环遍历数组并将标记添加到地图

for var i in 0..<json.count{
                let name = json[i]["Name"].string
                let address = json[i]["Address"].string
                let lat = json[i]["Lat"].double
                let lon = json[i]["Lon"].double
                let atm = Atm(name: name!,address: address!,lat: lat!,lon: lon!)
                self.atmArrayList.append(atm)



            }
            print(self.atmArrayList.count)
        }
        for atm in self.atmArrayList{
            let atmPin = AtmAnnotation(title: atm.name!, subtitle: atm.address!, atm: atm, coordinate: CLLocationCoordinate2D(latitude: atm.lat!, longitude: atm.lon!))
            self.annotationArray.append(atmPin)
        }

        self.atmMapView.addAnnotations(self.annotationArray)

我想要实现的是当用户点击rightCalloutAccessoryView按钮时,我想将该Annotation的特定Atm对象传递给另一个ViewController。

我的猜测是给Annotations一个id,然后从那个特定位置的Atm数组中获取Atm?

1 个答案:

答案 0 :(得分:2)

您需要在viewController

中实现此MapViewDelegate方法
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
  let anotherViewController = self.storyboard?.instantiateViewController(withIdentifier: "anotherViewController") as! AnotherViewController
  if let atmPin = view.annotation as? AtmAnnotation
  {
    anotherViewController.currentAtmPin = atmPin
  }
  self.navigationController?.pushViewController(anotherViewController, animated: true)

}

希望这有帮助