MKAnnotationView 现在显示 AccessoryItem

MKAnnotationView Now Showing AccessoryItem

我已经尝试按照不同的教程使我的 MKAnnotations 有一个附件项目,点击它会转到不同的页面;但是,我无法显示该项目。这是我在查看不同来源后得出的代码:

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)

    }

而PlaceAnnotationclass如下:

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
}
}

单击时注释上唯一显示的是标题,除此之外别无其他。感谢您的帮助,非常感谢!

(我在 Swift 3 工作)

我试过你的代码,它对我来说工作得很好。

但是当我删除 say 时,

mapView.delegate = self

附件没有出现,因为委托没有被调用。