Swift在Google Maps中检测哪个标记被点击了

3

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

1个回答

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            
}

在didTap方法中执行performsegue,就像这样。
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {

    performSegue(withIdentifier: "details", sender: marker)
    return true
}

现在在 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
        } 
    }
}

好的,这是我做的事情:我会在pastebin上放一个链接,因为不知道如何在评论中添加代码:Phttp://pastebin.com/aeQHT9cL - Magnifique
如果我在标记类索引中添加了内容,然后使用JSON解析创建标记数组时,是否更容易在类内部访问它?我的意思是...最糟糕的事情就是发送正确的数据。 - Magnifique
@Tonamini 你把 prepareForSegue 改成我的那个了吗?改完之后有没有正常工作? - Nirav D
你是我的神!<3 一切都正常工作了,这是可选的,所以我只需要解开它:D 非常感谢你! - Magnifique
好的。为了更好地理解你的代码,让我来澄清一下:D @Nirav D 我们使用userData来创建索引字典,prepare for segue让我们知道哪个标记被点击了,但是当我尝试将数据传递给详情视图控制器时,它要求我提供GMSMarker,而我想传递的是Marker...我已经尝试了各种方法 :< - Magnifique
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接