2017-04-05 82 views
2

我一直在建設一個谷歌地圖的iOS應用程序,不知何故我的'didTap標記'功能不起作用。如果我點擊地圖上的標記,整個視圖就會被拖動到左側,但是沒有代碼可以運行。否則,下面的打印功能將起作用。哪裏可能導致這個問題?爲什麼我的'didTap標記'功能不起作用?

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker){ 
    var lat: CLLocationDegrees = marker.position.latitude 
    var lng: CLLocationDegrees = marker.position.longitude 
    var formattedCoordinate = CLLocationCoordinate2D(latitude: lat,longitude: lng) 
    print("markersArray is \(markersArray)") 
    print("formattedCoordinate is \(formattedCoordinate)") 
    markersArray = markersArray.filter({ !(($0.latitude == formattedCoordinate.latitude) && ($0.longitude == formattedCoordinate.longitude)) }) 
} 
+0

這是委託方法no?你設置了mapView的代表嗎? – Larme

+0

這是一個委託方法。我不知道如何設置mapView的委託,我認爲它已經被認爲是委託方法,因此應該起作用。 – konyv12

+0

編輯:我先前設置了mapView的代理,自己 – konyv12

回答

5

您需要爲mapview設置委託。在viewDidLoad

myGMSMapView.delegate = self 

組代表就可以用這個方法

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 
     <#code#> 
    } 
+0

所以我總是需要添加返回類型?我有幾個函數沒有指定它們的返回類型。 – konyv12

+0

很顯然,您需要添加返回類型的委託方法 –

0

添加此委託在你的類。

GMSMapViewDelegate 

現在,這將是您的標記操作。

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

    mapView.delegate = self 

    print("You tapped : \(marker.position.latitude),\(marker.position.longitude)") 
} 
相關問題