我有一个MKMapView注释对象,它有一个正确的标注附件详细信息披露按钮。当按下按钮时,我使用addTarget:action:forControlEvent来调用一个选择器方法,该方法创建一个详细的viewController并将其推送到视图堆栈。
我的问题是访问启动标注细节控制器的注释信息的最佳方法是什么。详细信息披露按钮设置为调用:
[button addTarget:self action:@selector(disclosurePressed:) forControlEvents:UIControlEventTouchUpInside];
看起来像这样:
- (void)disclosurePressed:(id)sender {
}
我想我可以查找发件人UIButton的父注释,任何人都可以给我任何关于如何做得最好的指示。
答案 0 :(得分:4)
您可以更轻松地使用MKMapViewDelegate
mapView:annotationView:calloutAccessoryControlTapped:
方法,该方法可以直接告诉您点击了哪个注释视图。
答案 1 :(得分:3)
一种可靠的方法(如果必须使用自定义方法)是查看地图视图的selectedAnnotations
属性。
虽然属性是NSArray
,但由于地图视图一次只允许选择一个注释,因此用户刚刚点击的注释将位于索引0处,因此它将是:
id<MKAnnotation> annTapped = [mapView.selectedAnnotations objectAtIndex:0];
//Here, you can cast annTapped to a custom annotation class if needed.
//Be sure to check what kind of class it is first.
您可能还想首先检查mapView.selectedAnnotations.count
是否为零,只是为了安全。
但是,使用addTarget
和自定义操作方法的更好方法(如nevan king已经回答)是使用地图视图的calloutAccessoryControlTapped
委托方法,其中可以通过{直接访问注释{1}}参数使用:
view