mapView calloutAccessoryControlTapped,怎么知道是谁发起的?
mapView calloutAccessoryControlTapped, how to know who launched it?
我正在处理一个带有地图的项目,有些注释的视图有详细信息按钮。
这些注释是在 for 循环中创建的,我在其中获取 JSON 格式的数据,并且为每个元素创建一个注释。
但是,注释(或注释视图)与这些元素之间没有直接关联。
...
anView?.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
...
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
self.performSegueWithIdentifier("openInfo", sender: control)
}
我了解到这个按钮调用了带有calloutAccessoryControlTapped的mapView函数,并传递了AnnotationView。
问题是,即使我知道调用segue的AnnotationView,我也不知道this响应了谁。
有没有办法在 AnnotationView 中保存一些信息?我的意思是,以便 AnnotationView 的每个实例都有一个可以与我收到的数据相关的 ID?
还有其他想法吗?
谢谢
您可以从以下位置访问所选注释:
let selectedAnnotation = view.annotation as! CustomAnnotation // See structure below.
如果您有要访问的数据源,建议为您的 MKAnnotation
创建一个自定义对象,其中包含对数据源的一些引用,例如标识符。然后设置:
selectedId = selectedAnnotation.id
performSegueWithIdentifier("openInfo", sender: control)
然后在您的 prepareForSegue
中将 selectedId
传递给接收视图控制器。
编辑:您的注释 class 可能如下所示:
class CustomAnnotation: NSObject, MKAnnotation {
var title: String?
var coordinate: CLLocationCoordinate2D
var subtitle: String?
var id: Int
init(title: String, coordinate: CLLocationCoordinate2D, subtitle: String, id: Int) {
self.title = title
self.coordinate = coordinate
self.subtitle = subtitle
self.id = id
}
}
我正在处理一个带有地图的项目,有些注释的视图有详细信息按钮。
这些注释是在 for 循环中创建的,我在其中获取 JSON 格式的数据,并且为每个元素创建一个注释。 但是,注释(或注释视图)与这些元素之间没有直接关联。
...
anView?.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
...
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
self.performSegueWithIdentifier("openInfo", sender: control)
}
我了解到这个按钮调用了带有calloutAccessoryControlTapped的mapView函数,并传递了AnnotationView。
问题是,即使我知道调用segue的AnnotationView,我也不知道this响应了谁。 有没有办法在 AnnotationView 中保存一些信息?我的意思是,以便 AnnotationView 的每个实例都有一个可以与我收到的数据相关的 ID?
还有其他想法吗?
谢谢
您可以从以下位置访问所选注释:
let selectedAnnotation = view.annotation as! CustomAnnotation // See structure below.
如果您有要访问的数据源,建议为您的 MKAnnotation
创建一个自定义对象,其中包含对数据源的一些引用,例如标识符。然后设置:
selectedId = selectedAnnotation.id
performSegueWithIdentifier("openInfo", sender: control)
然后在您的 prepareForSegue
中将 selectedId
传递给接收视图控制器。
编辑:您的注释 class 可能如下所示:
class CustomAnnotation: NSObject, MKAnnotation {
var title: String?
var coordinate: CLLocationCoordinate2D
var subtitle: String?
var id: Int
init(title: String, coordinate: CLLocationCoordinate2D, subtitle: String, id: Int) {
self.title = title
self.coordinate = coordinate
self.subtitle = subtitle
self.id = id
}
}