MKAnnotationView现在显示AccessoryItem

时间:2016-12-30 15:20:45

标签: swift mapkit mkannotation

我尝试过以下不同的教程,让我的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)

    }

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

单击时注释上显示的唯一内容是标题,但没有其他内容。感谢您的帮助,非常感谢!

(我在Swift 3工作)

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码,它对我来说非常好。

但是当我删除时说,

mapView.delegate = self

附件项目未显示,因为未调用委托。