如何在地图中标记注释并在选择注释时获取标记值

时间:2017-08-01 12:33:57

标签: ios swift swift3

我正在做一个通过地图在线提供食物的项目。所以用户应该知道厨师的位置。当用户点击注释时,它应该查看厨师的食物菜单。所以当用户点击我需要调用cooks id。我可以根据标签值调用cooks id。

**Juntos.swift**


func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> 
MKAnnotationView?
{
    var annotationView = 
mapView.dequeueReusableAnnotationView(withIdentifier: "identifier")

    if annotationView == nil
      {
        annotationView = MKAnnotationView(annotation: annotation, 
         reuseIdentifier: "identifier")
        annotationView!.canShowCallout = true
      }
    else
      {
        annotationView?.annotation = annotation
      }

    guard !(annotation is MKUserLocation) else
      {
        return nil
      }

    if iamA == "COOK"
      {
        annotationView!.image = UIImage(named: "foodie")
      }
    else
      {
        annotationView!.image = UIImage(named: "cook")
      }
           return annotationView
}

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)
{
    //    how can i get annotation tag here
}

2 个答案:

答案 0 :(得分:3)

子类MKAnnoation并使其能够保存自定义数据...例如id:

class MyAnnotation: MKAnnotation {
    var identifier: String!
}

现在添加而不是MKAnnotation

let a = MyAnnotation()
....
a.identifier = "id525325"
mapView.addAnnotation(a)

然后再使用它

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    guard let a = view.annoation as? MyAnnoation else {
        return
    }
    let identifier = a.identifier

答案 1 :(得分:2)

像这样设置标签 -

annotationView.tag = 1
return annotationView

并获得这样的标签 -

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)
{
    // get annotation tag here
       let tag = view.tag
}