查找注释的索引MapKit

时间:2017-02-06 13:21:57

标签: swift mapkit

我一直在尝试执行注释,但是这段代码生成了不同的索引,并且在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)
  }
}

2 个答案:

答案 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并设置值。)