更新给定键的特定tapped marker.userdata值

时间:2016-11-28 17:23:06

标签: ios swift google-maps google-maps-markers updates

我正在使用userdata将自定义数据添加到我的Google地图标记中。我通过我创建的类设置marker.userdata。由于我有很多标记,我将字典变量分配给类,然后将该信息分配给userdata。

我的问题是,一旦我点击标记并在标签中显示我的用户数据,用户就可以更改我希望设置该标签的文本字段。如何更新/刷新/重置特定用于该分接标记的特定用户数据值?

设置课程

    class markerUserData{
var nameUserData: String
var tags: String

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

创建markers.userdata

    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 
}

2 个答案:

答案 0 :(得分:1)

我可以建议阅读Places API for IOS的官方Google文档,IOS的Google Places API提供有关地点的信息,包括地点的名称和地址。

地点ID是唯一标识地点的文字标识符。在Google Places API for iOS中,您可以从GMSPlace对象中检索地点的ID。您可以存储地点ID,并在以后再次使用它来检索GMSPlace对象。

要按ID获取地点,请拨打GMSPlacesClient lookUpPlaceID:callback:,传递地点ID和回调方式。

API调用指定的回调方法,传入GMSPlace对象。如果找不到该位置,则该位置对象为零。

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)")
  }
})

答案 1 :(得分:0)

在Google地图上查找特定位置。我们使用谷歌地图跟踪。有关详细信息,请访问Here

地点ID是唯一标识地点的文字标识符。在Google Places API for iOS中,您可以从GMSPlace对象中检索地点的ID。您可以存储地点ID,并在以后再次使用它来检索GMSPlace对象。

要按ID获取地点,请调用GMSPlacesClient lookUpPlaceID:callback:,传递地点ID和回调方法。

API调用指定的回调方法,传入GMSPlace对象。如果找不到该位置,则该位置对象为零。

// 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