点击时删除GMSMarker

时间:2016-12-22 22:42:26

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

如何在点按时删除GMSMarker?我希望当标记被点击时,警报控制器会显示并询问用户是否要保存或删除点击的标记。那么当按下“删除”按钮时,我如何才能删除被点击的标记?如果按下“保存”,如何在用户访问地图时如何保存它。到目前为止,我有这个基本结构,但不确定如何实现功能:

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

    print("didtapmarker")
    let alert = UIAlertController(title: "Add this place to wishlist?",
                                  message: "Would you like to add this to your list?",
                                  preferredStyle: .alert)

    let saveAction = UIAlertAction(title: "Save",
                                   style: .default)
    let cancelAction = UIAlertAction(title: "Remove",
                                     style: .default)


    //alert.addAction(defaultAction)
    alert.addAction(saveAction)
    alert.addAction(cancelAction)


    self.present(alert, animated: true, completion: nil)
     return false
}

那我从哪里开始呢?任何建议,将不胜感激。

2 个答案:

答案 0 :(得分:0)

只需将地图设置为nil,标记就会消失。

marker.map = nil

答案 1 :(得分:0)

要从地图中删除标记,请将map设置为nil

marker.map = nil

初始化handler时,您可以将上述代码放在UIAlertAction封闭中:

let cancelAction = UIAlertAction(title: "Remove",
                                 style: .default) {
    _ in marker.map = nil
}

保存标记有点复杂。如果您一次只想保存一个标记,可以使用UserDefaults

if let latitude = marker.latitude?.doubleValue, let longitude = marker.longitude?.doubleValue {
    UserDefaults.standard.set(latitude, forKey: "lat")
    UserDefaults.standard.set(longitude, forKey: "lon")
}

要在viewDidLoad的地图上显示已保存的标记,请先检索已保存的经度和纬度:

let latitude = UserDefaults.standard.double(forKey: "lat")
let longitude = UserDefaults.standard.double(forKey: "lon")

并使用这些值构建新的GMSMarker

如果要在地图上保存多个标记,则需要使用Core Data。这比UserDefaults更棘手。我建议你先阅读一些教程。然后,您可以阅读我所做的类似项目的代码 - LongLatMap