Получить событие касания аннотации MapKit Swift

у меня есть массив класса. и в mkmapview я добавляю несколько аннотаций.

var events = [Events]()

   for event in events {
        let eventpins = MKPointAnnotation()
        eventpins.title = event.eventName
        eventpins.coordinate = CLLocationCoordinate2D(latitude: event.eventLat, longitude: event.eventLon)
        mapView.addAnnotation(eventpins)
    }

С делегатом карты я реализовал функцию

 func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    print(view.annotation?.title! ?? "")
}

Как узнать, какая строка массива events используется? Потому что я хочу перейти в другой ViewController, и я хотел бы отправить этот объект класса.


person Konstantinos Natsios    schedule 06.03.2017    source источник


Ответы (1)


Вы должны создать собственный класс аннотаций, например:

class EventAnnotation : MKPointAnnotation {
    var myEvent:Event?
}

Затем, когда вы добавите свои аннотации, вы свяжете Event с пользовательской аннотацией:

for event in events {
    let eventpins = EventAnnotation()
    eventpins.myEvent = event // Here we link the event with the annotation
    eventpins.title = event.eventName
    eventpins.coordinate = CLLocationCoordinate2D(latitude: event.eventLat, longitude: event.eventLon)
    mapView.addAnnotation(eventpins)
}

Теперь вы можете получить доступ к событию в функции делегата:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    // first ensure that it really is an EventAnnotation:
    if let eventAnnotation = view.annotation as? EventAnnotation {
        let theEvent = eventAnnotation.myEvent
        // now do somthing with your event
    }
}
person Andreas Oetjen    schedule 06.03.2017
comment
Именно то, что я искал! - person Konstantinos Natsios; 07.03.2017