2017-02-06 188 views
0

我一直在嘗試執行註解,但是這段代碼生成不同的索引,並在detailsView中顯示錯誤的地方。找出解決這個問題的方法是非常好的。查找註釋索引MapKit

感謝

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

我覺得這裏的主要問題是,你想到的是mapView.annotations將返回所有註釋以相同的順序爲您detailsDict - 陣列是一個數組。我認爲這個假設很容易出錯,因爲它高度依賴於MapKit框架的內部實現。

一個更好的方式是與PlaceAnnotation一起存儲字典條目添加到地圖:

  • 添加一個新的屬性detailsPlaceAnnotation
  • 設置details值在創建PlaceAnnotation
  • in calloutAccessoryControlTapped,從PlaceAnnotation獲取詳情屬性
  • 將此值傳遞給詳細控制器(可能通過您的selectedPlace屬性,但我更願意直接安裝ViewController並設置值)。
1

我們可以用這種方法

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)") 

}