很难给出具体的答案,因为我不知道您的功能的全部范围。但这就是你通常的做法。
首先,当您创建MKAnnotation 子类时,您定义一个属性来保存您可以稍后引用的对象。例如,假设我在地图上显示餐馆和超市。
class RestaurantAnnotation: NSObject, MKAnnotation {
let restaurant: Restaurant
var title: String? {
return restaurant.name
}
var coordinate: CLLocationCoordinate2D {
return restaurant.coordinate
}
init(restaurant: Restaurant) {
self.restaurant = restaurant
super.init()
}
}
struct Restaurant {
let name: String
let coordinate: CLLocationCoordinate2D
}
超市也是如此。
然后在创建注解时,将Restaurant 对象传递给它。
let restaurant = Restaurant(name: "McDonald's", coordinate: CLLocationCoordinate2D(latitude: 27.2831, longitude: -127.831))
let restaurantAnnotation = RestaurantAnnotation(restaurant: restaurant)
mapView.addAnnotation(restaurantAnnotation)
您实现mapView(_:annotationView:calloutAccessoryControlTapped:) 委托方法,以便在用户点击注释中的标注按钮时收到通知。在其中,您可以轻松引用之前传递给它的对象。
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if let annotation = view.annotation as? RestaurantAnnotation {
print(annotation.restaurant)
} else if let annotation = view.annotation as? SupermarketAnnotation {
print(annotation.supermarket)
}
}
之后,您可以使用这些数据做任何您想做的事情。在您的情况下,将其传递到新屏幕。