Josh O'Connor
Josh O'Connor

Reputation: 4962

How to access specific index of MKAnnotation

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

Answers (1)

Judson Douglas
Judson Douglas

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

Related Questions