2016-12-22 107 views
0

点击时如何启用GMSMarker?我想当一个标记点​​击一个警报控制器显示并询问用户是否想要保存或删除点击标记。那么当按下“删除”按钮时,我怎么才能得到点击标记?以及如果按下'保存'后用户何时访问地图,我该如何保存它。我有这个基本结构到目前为止,但不知道如何实现功能:点击时删除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 
} 

那么,我会从哪里去?任何建议,将不胜感激。

回答

0

要从地图移除标记,设置mapnil

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

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

+0

完美。看起来我需要深入研究Core Data以及如何使用它,因为我希望用户能够保存多个标记。感谢您指点我正确的方向。 –

0

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

marker.map = nil