2017-03-16 20 views
1

マップ上でどのマーカーが押されたかを検出する方法は不思議です。私はいくつかのデータが含まれている、APIからダウンロードされたマーカー配列のマップとクラスマーカー上のマーカーがほとんどありません。今私はマーカーを押すと、次のVCにどのようにデータを送信するのだろうかと思います。配列全体を次のVCに送るのはいいですか?そして、どういうわけか他のVCの配列を通してデータを取得しますか?スウィフトGoogleマップでどのマーカーが押されたかを検出する

答えて

2

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メソッドを実行します。 prepareForSegueで今

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

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

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 
     } 
    } 
} 
+0

オーケー、私が行って何です: コメントにコードを追加する方法がわからないので、私は、ペーストビンへのリンクを配置します:P http://pastebin.com/aeQHT9cL – Magnifique

+0

@Tonamini編集された答えを確認してください –

+0

まだ空のdictを取得しています。 http://pastebin.com/i6UEfq2R すべてがOKと思われます – Magnifique

関連する問題