我一直在尝试执行注释,但是这段代码生成了不同的索引,并且在detailsView中显示了错误的位置。很高兴找到解决这个问题的方法。
由于
var detailsDict = [NSDictionary]()
var selectedPlace: NSDictionary!
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if (view.annotation?.isKind(of: PlaceAnnotation.self))! {
let annotation = view.annotation
let index = (self.mapView.annotations as NSArray).index(of: annotation!)
let place = detailsDict[index]
selectedPlace = place
performSegue(withIdentifier: "showMuseumDetails", sender: self)
}
}
答案 0 :(得分:2)
我们可以使用这种方法
func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
let annotation = view.annotation
let index = (self.mapView.annotations as NSArray).index(of: annotation!)
print ("Annotation Index = \(index)")
}
答案 1 :(得分:0)
我认为这里的主要问题是你希望mapView.annotations
返回一个数组,其中所有注释的顺序与detailsDict
- 数组的顺序相同。我认为这种假设很容易出错,因为它高度依赖于MapKit框架的内部实现。
更好的方法是将Dictionary条目与您添加到地图中的PlaceAnnotation
一起存储:
details
添加到课程PlaceAnnotation
details
PlaceAnnotation
值
calloutAccessoryControlTapped
中,从PlaceAnnotation selectedPlace
属性,但我更喜欢直接设置ViewController并设置值。)