2016-11-28 4 views
0

私はuserdataを使用してGoogleマップマーカーにカスタムデータを追加しています。私は、作成したクラスを通して、marker.userdataを設定しています。私は多くのマーカーを持っているので、クラスに辞書変数を割り当てて、その情報をuserdataに割り当てています。特定のタップされたmarker.userdata値を特定のキーに更新します。

私の質問は、マーカーをタップしてラベルにユーザーデータを表示すると、ユーザーはそのラベルを設定するテキストフィールドを変更できます。そのタップしたマーカーに特定のユーザーデータ値を更新/更新/リセットするにはどうすればよいですか?

class markerUserData{ 
var nameUserData: String 
var tags: String 

init(Name: String, Tags: String) { 
    self.nameUserData = Name 
    self.tags = Tags 
} 

は、私が提案することができますどのような

for p in STOREDPlaces { 

      let name = p["StoredPlaceName"] as? String 
      let tags = p["Tags"] as? Strin 
      markers.map = self.vwGMap 
      self.vwGMap.setNeedsDisplay() 

      let storedPlaceUserData = markerUserData(Name: name!, Tags: tags!) 
      markers.userData = storedPlaceUserData 
     } 

タップ機能

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

     detailsName.text = (marker.userData as! markerUserData).nameUserData 
tagsMarker = (marker.userData as! markerUserData).tags 
    } 

    @IBAction func editingTextField(_ sender: Any) { 
    //So in here i want something which will update (marker.userData as! markerUserData).tags and set it to whatever has been edited 
} 

答えて

1

をmarkers.userdataを作成するクラスを設定

は、Places API for IOSのための公式のGoogleドキュメントを読むことですIOS用GoogleプレイスAPIは、場所に関する情報を提供しますg場所の名前と住所。

場所IDは、場所を一意に識別するテキスト識別子です。 iOS向けGoogle Places APIでは、GMSPlaceオブジェクトから場所のIDを取得できます。プレースIDを格納して、後でGMSPlaceオブジェクトを再度取得するために使用することができます。

IDで場所を取得するには、場所IDとコールバックメソッドを渡してGMSPlacesClient lookUpPlaceID:callback:に電話してください。

APIは、指定されたコールバックメソッドを呼び出し、GMSPlaceオブジェクトを渡します。場所が見つからない場合、場所オブジェクトはnilです。

let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" 

GMSPlacesClient.shared().lookUpPlaceID(placeID, callback: { (place: GMSPlace?, error: NSError?) -> Void in 
    if let error = error { 
    print("lookup place id query error: \(error.localizedDescription)") 
    return 
    } 

    if let place = place { 
    print("Place name \(place.name)") 
    print("Place address \(place.formattedAddress)") 
    print("Place placeID \(place.placeID)") 
    print("Place attributions \(place.attributions)") 
    } else { 
    print("No place details for \(placeID)") 
    } 
}) 
+0

お世話になりましたが、これらのドキュメントを何度も読んでいます。私が混乱しているのは、上記の例ではplaceIDがわかっています(「ChIJV4k8_9UodterU5KXbkYpSYs」)。一方、autocompleteメソッドではplaceID変数が常に変化しているので、varID = GMSPlace.placeIDまたはhow ?または、私はフェッチャーでオートコンプリートを行う必要がありましたか? –

0

Googleマップで特定の位置を検索するには: Googleマップトラッキングを使用します。詳細情報はHere

場所IDは場所を一意に識別するテキスト識別子です。 iOS向けGoogle Places APIでは、GMSPlaceオブジェクトから場所のIDを取得できます。プレースIDを保存しておけば、後でGMSPlaceオブジェクトを再度取得できます。

IDで場所を取得するには、GMSPlacesClient lookUpPlaceID:callback:を呼び出して、場所IDとコールバックメソッドを渡します。

APIは、指定されたコールバックメソッドを呼び出し、GMSPlaceオブジェクトを渡します。場所が見つからない場合、場所オブジェクトはnilです。

// Here use your placeID 
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" 

placesClient.lookUpPlaceID(placeID, callback: { (place, error) -> Void in 
    if let error = error { 
    print("lookup place id query error: \(error.localizedDescription)") 
    return 
    } 

    guard let place = place else { 
    print("No place details for \(placeID)") 
    return 
    } 

    print("Place name \(place.name)") 
    print("Place address \(place.formattedAddress)") 
    print("Place placeID \(place.placeID)") 
    print("Place attributions \(place.attributions)") 
}) 

次のコードサンプルは、デバイスが配置される可能性が最も高い場所のリストを取得し、各場所の名前、可能性、およびその他の詳細をログに記録します。

placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in 
    if let error = error { 
    print("Pick Place error: \(error.localizedDescription)") 
    return 
    } 

    if let placeLikelihoodList = placeLikelihoodList { 
    for likelihood in placeLikelihoodList.likelihoods { 
     let place = likelihood.place 
     print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)") 
     print("Current Place address \(place.formattedAddress)") 
     print("Current Place attributions \(place.attributions)") 
     print("Current PlaceID \(place.placeID)") 
    } 
    } 
}) 
//Add a marker 
//To add a marker, create a GMSMarker object that includes a position and title, and set its map. 
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) 
let marker = GMSMarker(position: position) 
marker.title = "Hello World" 
marker.map = mapView 
関連する問題