快速检测谷歌地图上按下的标记

Mag*_*que 3 xcode google-maps ios swift

我想知道如何检测地图上按下了哪个标记。我在地图上有一些标记,并且在从 API 下载的标记数组中的类 Marker 上有一些标记,其中包含一些数据。现在我想知道如何在按下标记后将数据发送到下一个 VC。将整个数组发送到下一个 VC,然后以某种方式通过另一个 VC 上的数组获取数据,这样好吗?

Nir*_*v D 6

您可以使用userData属性来存储所需的唯一数据。

for (index,i) in markers.enumerated() {
      let marker = GMSMarker()
      marker.position = CLLocationCoordinate2DMake(i.lat, i.lng)
      marker.userData = ["index": index]
      print("@@@\(i.id)")
      marker.title = i.name
      marker.map = mapView            
}
Run Code Online (Sandbox Code Playgroud)

像这样在 didTap 方法中执行segue。

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {

    performSegue(withIdentifier: "details", sender: marker)
    return true
}
Run Code Online (Sandbox Code Playgroud)

现在prepareForSegue从 中获取对象的索引userData

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "details" {
        var nextVC =  segue.destination as! VC2
        if let marker = sender as? GMSMarker,
           let dict = marker.userData as? [String:Int] {


             print(dict["index"])
            // use this array index to access object from array
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)