如何检测地图上按下了哪个标记。我在地图上有很少的标记,从API下载的标记数组中有Marker类,它包含一些数据。
例如我有这样的数据
[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?
答案 0 :(得分:4)
所以我想你通过迭代遍历数组来添加标记:
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]
}
}