详细披露之后的注解细节被按下了吗

我有一个MKMapView注释对象,有一个正确的标注附件详细披露button。 当按下button时,我正在使用addTarget:action:forControlEvent调用一个select器方法,该方法创build一个详细viewController并将其推送到视图堆栈。

我的问题是什么是访问启动标注详细信息控制器的注释信息的最佳方式。 详细披露button被设置为调用:

[button addTarget:self action:@selector(disclosurePressed:) forControlEvents:UIControlEventTouchUpInside]; 

看起来像这样:

 - (void)disclosurePressed:(id)sender { } 

我想我可以find发件人UIButton的父注释,任何人都可以给我任何指示这是最好的。

您可能更容易使用MKMapViewDelegate mapView:annotationView:calloutAccessoryControlTapped:方法,该方法直接告诉您哪个注释视图被点击。

可靠的方法(如果您必须使用自定义方法)是查看地图视图的selectedAnnotations属性。

虽然该属性是一个NSArray ,但由于地图视图一次只允许select一个注释,用户刚截取的注释将位于索引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委托方法,其中注释可以通过view参数直接访问:

 id<MKAnnotation> annTapped = view.annotation;