我一直在尝试为注释执行语法,但这段代码生成了不同的索引,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)
}
}
最佳答案
我认为这里的主要问题是您希望mapView.annotations
返回一个数组,其中所有注释的顺序与detailsDict
数组的顺序相同。我认为这个假设很容易出错,因为它高度依赖于MapKit框架的内部实现。
更好的方法是将字典条目与添加到映射的PlaceAnnotation
一起存储:
将新属性details
添加到类PlaceAnnotation
创建details
时设置PlaceAnnotation
值
在calloutAccessoryControlTapped
中,从PlaceAnnotation获取details属性
将该值传输到detail controller(可能通过selectedPlace
属性,但我更希望直接安装ViewController并设置该值)。
关于swift - 查找注释MapKit的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42068857/