2016-12-30 9 views
0

Я пробовал следовать различным учебным пособиям, чтобы мои MKAnnotes имели дополнительный элемент, который будет переходить на другую страницу при нажатии; однако я не могу получить элемент для показа. Вот код, который я придумал после рассмотрения различных источников:MKAnnotationView Now Showing AccessoryItem

extension MapController : MKMapViewDelegate { 

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 

    let identifier = "PlaceAnnotation" 

    if annotation is PlaceAnnotation { 

     var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) 

     if annotationView == nil { 

      annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) 
      annotationView!.canShowCallout = true 

     } else { 

      annotationView!.annotation = annotation 
     } 
     annotationView!.leftCalloutAccessoryView = nil 
     annotationView!.rightCalloutAccessoryView = UIButton(type: UIButtonType.detailDisclosure) 
     return annotationView 
    } 

    return nil 
} 

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 
    let place = view.annotation as! PlaceAnnotation 
    let placeName = place.title 
    print(placeName!) 

    let placeInfo = place.placeObject 

    let ac = UIAlertController(title: placeInfo?.title, message: placeInfo?.description, preferredStyle: .alert) 
    ac.addAction(UIAlertAction(title: "OK", style: .default)) 
    present(ac, animated: true) 

} 

} 

Затем, чтобы создать аннотацию, у меня есть это:

for place in places { 

     let placeCoord = CLLocationCoordinate2D(latitude: CLLocationDegrees(place.latitude)!, longitude: CLLocationDegrees(place.longitude)!) 

     let annotation = PlaceAnnotation(title: place.title, coordinate: placeCoord, placeObject: place) 
     mapView.addAnnotation(annotation) 

    } 

А класс PlaceAnnotation выглядит следующим образом:

class PlaceAnnotation: NSObject, MKAnnotation { 

var coordinate: CLLocationCoordinate2D 
var title: String? 
var placeObject: Location? 

init(title: String, coordinate: CLLocationCoordinate2D, placeObject: Location) { 
    self.title = title 
    self.coordinate = coordinate 
    self.placeObject = placeObject 
} 
} 

Единственное, что отображается в аннотации при нажатии, это Title, но ничего больше. Я ценю любую помощь, большое спасибо!

(я работаю в Swift 3)

+0

показать код создания карты – Matt

ответ

0

Я попробовал ваш код и он отлично работает для меня.

Но когда я снял скажем,

mapView.delegate = self 

Аксессуар пункт не показывался, потому что делегат не вызывается.

+0

Как смущающе ... Я забыл написать mapView.delegate часть haha. Спасибо огромное! – JD2017

+0

Добро пожаловать. – Matt