2017-04-26 50 views
1

如何檢測在地圖上按下哪個標記。從API下載的標記數組中包含一些數據,我在地圖和類Marker上沒有標記。如何從GMSMarker獲取索引?

例如我有這樣

[States(name: "text1", long: 110.42400399999997,lat: -7.0343237999999992), 
States(name: "text2", long: 110.42769829999997, lat: -7.0856947999999997), 
States(name: "text3", long: 110.42922440000007, lat: -7.3250846999999997), 
States(name: "text4", long: 117.11625830000003, lat: -0.50436380000000003), 
States(name: "text5", long: 110.43093620000002, lat: -7.0730081999999994)] 

數據,如果我在包含數據1(States(name: "text1", long: 110.42400399999997,lat: -7.0343237999999992)

標記挖掘如何獲得指數爲0,如果我上標記挖掘包含數據2,我如何獲得索引1?

回答

3

,所以我想你通過這樣的循環訪問數組添加的標記:

for state in states { // assuming states is the array you showed in the question 
    let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: state.lat, longitude: state.long)) 
    // configure the marker... 
    marker.map = mapView 
} 

的想法是,你添加標記到一個數組,以及,你創建它之後。由於您按照數據的順序創建了標記,因此包含標記的數組中的每個項目都對應於相同索引處的數據。

讓我們聲明標記列陣在類級別:

var markers = [GMSMarker]() 

然後在for循環以上,標記添加到markers

markers.append(marker) 

現在,你可以找出哪些數據被竊聽只是通過:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 
    if let index = markers.index(of: marker) { 
     let tappedState = states[index] 
    } 
} 
+0

非常感謝!有用! –