指定调用哪个calloutAccessoryControlTapped

时间:2014-06-09 02:56:58

标签: objective-c mapkit

我正在开发一个mapkit应用程序,它会在某些位置丢弃地图上的图钉(最后的代码)

我还为callout添加了代码。但是,根据敲击的引脚,我正在尝试加载不同的视图,我没有找到任何奇怪的方法。

我放了一个断点,然后一步一步地注意到有一条线在读。 "annotation.title=@"myhome";所以我想知道是否有某种方式我可以说取决于哪个注释被点击了。

由于

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {

    if([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    static NSString *identifier = @"myAnnotation";
    MKPinAnnotationView * annotationView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (!annotationView)
    {
                     annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];

        annotationView.pinColor = MKPinAnnotationColorRed;
        annotationView.animatesDrop = YES;
        annotationView.canShowCallout = YES;
    }else {
        annotationView.annotation = annotation;
    }
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    return annotationView;
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

    NSLog(@"Callout Tapped");
}

- 更新了代码

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {

    if([annotation isKindOfClass:[MKUserLocation class]])
        return nil;
  //  NSLog(annotation);

    static NSString *identifier = @"myAnnotation";
    MKPinAnnotationView * annotationView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (!annotationView)
    {

        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];

        annotationView.pinColor = MKPinAnnotationColorRed;
        annotationView.animatesDrop = YES;
        annotationView.canShowCallout = YES;
    }else {
        annotationView.annotation = annotation;
    }
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    return annotationView;
}


- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    id <MKAnnotation> annotation = [view annotation];
    if ([annotation isKindOfClass:[MKPointAnnotation class]])
        {
    //    MKUserLocation *ann = (MKUserLocation *)view.annotation;
     //   NSLog(@"ann.title = %@", ann.title);
        NSLog(@"HJ");
    }
}

1 个答案:

答案 0 :(得分:0)

您可以为左侧设置标记1,为右侧附件视图设置2。在您的calloutAccessoryControlTapped方法中,请执行以下操作:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

    if ([control tag] == 1) {
        NSLog(@"tapped left accessory");
    }
    else if ([control tag] == 2) {
        NSLog(@"tapped right accessory");
    }
}