你应该查看 MKMapKit Delegate 文档,它有很多很好的方法可以用来做你想做的事情。我绝对不会尝试将 UIButton 添加到注释视图。
管理注释视图 – mapView:viewForAnnotation: – mapView:didAddAnnotationViews: – mapView:annotationView:calloutAccessoryControlTapped: 拖动注释视图 – mapView:annotationView:didChangeDragState:fromOldState: 选择注释视图
– mapView:didSelectAnnotationView:
– mapView:didDeselectAnnotationView:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if([annotation isKindOfClass: [MKUserLocation class]])
{
return nil;
}
else if([annotation isKindOfClass:[MYCLASS class]])
{
static NSString *annotationViewReuseIdentifier = @"annotationViewReuseIdentifier";
MKAnnotationView *annotationView = (MKAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewReuseIdentifier];
if (annotationView == nil)
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewReuseIdentifier];
}
//Add an Image!
annotationView.image = [UIImage imageNamed:@"trashMarker.png"];
//Move the Frame Around!
[annotationView setFrame:CGRectMake(annotationView.frame.origin.x, annotationView.frame.origin.y - annotationView.frame.size.height, annotationView.frame.size.height, annotationView.frame.size.width)];
//Finally Set it as the annotation!
annotationView.annotation = annotation;
//Return the annotationView so the MKMapKit can display it!
return annotationView;
}}
您的 MKAnnotation 子类(IE 符合协议)默认情况下应该包含一个标签(我认为),但如果它不只是自己添加一个属性,那么您可以区分地图上的不同标记。你的方法应该是这样的,
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
MYCLASS *selectedMapPin = view.annotation;
if(selectedMapPin.tag == MY_PIN_TAG)
{
//SHOW VIEW CONTROLLER
}}
有关更多示例,您可以参考我们的 Green Up Vermont 开源项目
Green Up Vermont iOS 应用程序