2017-02-13 5 views
1

Я пытаюсь сделать много разных аннотаций. Все аннотации необходимо настроить по прекрасной причине.Как установить идентификатор в MKPointAnnotation

Я знаю, что ему нужно использовать viewFor Annotation, но как я могу узнать, что это за аннотация?

enter image description here

func addZoneAnnotation() { 

    let zoneLocations = ZoneData.fetchZoneLocation(inManageobjectcontext: managedObjectContext!) 

    for zoneLocation in zoneLocations! { 

     let zoneCoordinate: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: Double(zoneLocation["latitude"]!)!, longitude: Double(zoneLocation["longitude"]!)!) 

     let zoneAnnotation = MKPointAnnotation() 
     zoneAnnotation.coordinate = zoneCoordinate 


     map.addAnnotation(zoneAnnotation) 

    } 

} 
+0

zoneAnnotation.title = "YOURTITLE" –

+0

Вы можете использовать viewForAnnotation Delegate и установить тег в зависимости от типа аннотации. –

+1

проверить эту ссылку - http://stackoverflow.com/questions/29307173/identify-mkpointannotation-in-mapview –

ответ

0

Подкласс MKPointAnnotation добавить любой собственности, что вы хотите:

class MyPointAnnotation : MKPointAnnotation { 
    var identifier: String? 
} 

Затем вы можете использовать его следующим образом:

func addZoneAnnotation() { 
    let zoneLocations = ZoneData.fetchZoneLocation(inManageobjectcontext: managedObjectContext!) 

    for zoneLocation in zoneLocations! { 
     let zoneCoordinate: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: Double(zoneLocation["latitude"]!)!, longitude: Double(zoneLocation["longitude"]!)!) 
     let zoneAnnotation = MyPointAnnotation() 
     zoneAnnotation.coordinate = zoneCoordinate 
     zoneAnnotation.identifier = "an identifier" 

     map.addAnnotation(zoneAnnotation) 
    } 
} 

И, наконец, когда вам нужно доступ к нему:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 
    guard let annotation = annotation as? MyPointAnnotation else { 
     return nil 
    } 

    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "reuseIdentifier") 
    if annotationView == nil { 
     annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "reuseIdentifier") 
    } else { 
     annotationView?.annotation = annotation 
    } 

    // Now you can identify your point annotation 
    if annotation.identifier == "an identifier" { 
     // do something 
    } 

    return annotationView 
} 
Смежные вопросы