Swift地图图钉标注和参数

时间:2019-04-01 01:14:54

标签: swift mapkit mkpinannotationview

我使用MapKit在iOS应用程序上制作了地图。

我通过一个标注按钮将我的图钉添加到了视图中,该标注按钮在图钉弹出窗口中显示了de detail按钮。

这一次,一切都很好,当我点击详细信息按钮时,我可以打印一些文本,提供一个新的视图控制器,但是我的问题是我不知道如何知道我使用的是哪个引脚点击。

我可以使用标题来解决它,但这对我来说不是最好的方法,我更喜欢使用项目ID而不是字符串。

如果有人知道如何在自己的图钉上添加“ id”属性或使用subtitle属性(在弹出气泡中未显示),我将不胜感激:)

谢谢您的帮助。

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

    let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "customAnnotation")
    annotationView.image = UIImage(named: "pin")
    annotationView.canShowCallout = true
    annotationView.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)

    return annotationView
}


func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl){

    print("OK, item tapped.")
}

1 个答案:

答案 0 :(得分:0)

您可以继承MKPointAnnotation来添加ID属性

class CustomPointAnnotation: MKPointAnnotation {
    let id: Int

    init(id: Int) {
        self.id = id
    }
}

用法

let annotation = CustomPointAnnotation(id: INTEGER)
annotation.coordinate = CLLocationCoordinate2D(latitude: DOUBLE, longitude: DOUBLE)
mapView.addAnnotation(annotation)

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if let annotation = view.annotation as? CustomPointAnnotation {
        print("Annotation \(annotation.id)")
    }
}

您还可以通过扩展基础MKAnnotation协议来创建自己的注释类,如下所示:

class CustomAnnotation: NSObject, MKAnnotation {
    let id: Int
    let coordinate: CLLocationCoordinate2D

    init(id: Int, latitude: Double, longitude: Double) {
        self.id = id
        self.coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    }
}