Reputation: 4962
I have a mapView populated with markers using MKAnnotations. I am able to get the array of annotations fine. However, how do I figure out the index of the marker that is tapped? Say I tapped a marker and the MKAnnotation popped up. How do I get this instance of the annotation?
ViewDidAppear code:
for (var i=0; i<latArray.count; i++) {
let individualAnnotation = Annotations(title: addressArray[i],
coordinate: CLLocationCoordinate2D(latitude: latArray[i], longitude: longArray[i]))
mapView.addAnnotation(individualAnnotation)
}
//store annotations into a variable
var annotationArray = self.mapView.annotations
//prints out an current annotations in array
//Result: [<AppName.Annotations: 0x185535a0>, <AppName.Annotations: 0x1663a5c0>, <AppName.Annotations: 0x18575fa0>, <AppName.Annotations: 0x185533a0>, <AppName.Annotations: 0x18553800>]
println(annotationArray)
Annotations class: import MapKit
class Annotations: NSObject, MKAnnotation {
let title: String
//let locationName: String
//let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.coordinate = coordinate
super.init()
}
var subtitle: String {
return title
}
}
Upvotes: 2
Views: 1049
Reputation: 331
MKMapViewDelegate provides a delegate method mapView:annotationView:calloutAccessoryControlTapped: Implementing this method provides you with the MKAnnotationView of the MKAnnotation instance you're looking for. You can call the MKAnnotationView's annotation property to get the corresponding instance of the MKAnnotation.
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
var sortedAnnotationArray: [MKAnnotation] = [] //create your array of annotations.
//your ViewDidAppear now looks like:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
for (var i = 0; i < latArray.count; i++) {
let individualAnnotation = Annotations(title: addressArray[i], coordinate: CLLocationCoordinate2D(latitude: latArray[i], longitude: longArray[i]))
mapView.addAnnotation(individualAnnotation)
//append the newly added annotation to the array
sortedAnnotationArray.append(individualAnnotation)
}
}
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
let theAnnotation = view.annotation
for (index, value) in enumerate(sortedAnnotationArray) {
if value === theAnnotation {
println("The annotation's array index is \(index)")
}
}
}
}
Upvotes: 1