我一直在尝试为注释执行语法,但这段代码生成了不同的索引,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/

10-10 23:43