Я делаю приложение Swift, которое использует MKPointAnnotation
s, и недавно столкнулся с проблемой, когда мне нужно было хранить метаданные в моих аннотациях, поэтому я создал пользовательский класс ниже:
class BRETTFAnnotation: MKPointAnnotation {
var tag: Int64
var name: String
init(lat : Double, lon:Double, t : Int64, n: String) {
self.tag = t
self.name = n
super.init()
self.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon)
}
}
Мой метод MKAnnotationView
viewfor MKAnnotation
показан ниже:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let newAnnotation = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "reuse")
newAnnotation.canShowCallout = true
let right = self.button(title: "Yes")
right?.addTarget(self, action: #selector(clickedToConfirmNewPoint), for: .touchUpInside)
newAnnotation.rightCalloutAccessoryView = right
let left = self.button(title: "No")
left?.addTarget(self, action: #selector(clickedToCancelNewPoint), for: .touchUpInside)
newAnnotation.leftCalloutAccessoryView = left
return newAnnotation
}
Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на свой собственный BRETTFAnnotation
(который я добавляю к своему MKMapView
), ничего не происходит. Когда я просто использовал MKPointAnnotation
(вместо BRETTFAnnotation
), когда я нажимал на карту, отображались две кнопки на MKAnnotationView
. Я пытаюсь заставить MKPinAnnotationView
отображаться при касании, используя BRETTFAnnotation
вместо MKPointAnnotation
.
Как я могу продолжать использовать свою пользовательскую аннотацию и отображать выноску, когда пользователь одновременно нажимает аннотацию?
Редактировать 1: поскольку это, вероятно, полезно, приведенный ниже код - это то, как я делаю аннотацию и добавляю ее в mapView.
let location = gestureRecognizer.location(in: mapView)
let coordinate = mapView.convert(location,toCoordinateFrom: mapView)
print("adding lat,long \(coordinate.latitude),\(coordinate.longitude)")
lastPoint = BRETTFAnnotation(lat: coordinate.latitude, lon: coordinate.longitude, t: 1, n: "")
let annotationView = MKPinAnnotationView(annotation: lastPoint, reuseIdentifier: "reuse")
mapView.addAnnotation(lastPoint)