单击MKAnnotationView中的按钮

时间:2012-11-23 14:24:10

标签: iphone ios delegates mkmapview

我正在使用MKMapView

开发应用程序

有一些注释,当你点击注释图像时,会显示详细信息

为此我构建了我的自定义@interface注释:NSObject并添加了一个布尔值“bClicked”

现在我希望用户能够点击详细视图中的详细信息按钮,但我所制作的代码不起作用:

#pragma mark - MKMapViewDelegate

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    MKAnnotationView *annotationView = nil;


    int index = 0;

    BOOL bFound = FALSE;

    for (int i=0;i<[shopAnnotations count];i++)
    {
        if (annotation == [shopAnnotations objectAtIndex:i])
        {
            index = i;
            bFound = TRUE;
            break;
        }
    }

    if (bFound==FALSE)
    {
        //ADLog(@"bFound FALSE annotation %p",annotation);
        return annotationView; // <-- nil
    }


    Annotation *shopAnnotation = [shopAnnotations objectAtIndex:index];

    annotationView = [_mapView dequeueReusableAnnotationViewWithIdentifier:shopAnnotation.identifier];

    if (!annotationView)
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:shopAnnotation reuseIdentifier:shopAnnotation.identifier] autorelease];

    for (UIView*view in annotationView.subviews)
    {
        [view removeFromSuperview];
    }

    annotationView.image = shopAnnotation.Image;
    annotationView.alpha = 1.0f;
    annotationView.enabled = YES;
    annotationView.canShowCallout = YES;

    annotationView.userInteractionEnabled = YES;

    if (shopAnnotation.bClicked==TRUE)
    {

        UIView *detailView = [[UIView alloc ] initWithFrame:CGRectMake(0, -50, 290, 56)];
        detailView.userInteractionEnabled = YES;
        detailView.superview = annotationView;
        [detailView release];

        UIImageView *bg = [[UIImageView alloc ] initWithImage:[UIImage imageNamed:@"bulle_carte.png"]];

        [bg setFrame:CGRectMake(0, 0, 290, 56)];
        bg.superview = detailView;

        [bg release];

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

        [button setFrame:CGRectMake(250, 3, 35, 35)];

        [button setImage:[UIImage imageNamed:@"fleche_bleue_d.png"] forState:UIControlStateNormal];
        button.tag = [shopAnnotation.identifier intValue];
        [button addTarget:self action:@selector(btnDetailPressed:) forControlEvents:UIControlEventTouchUpInside];

        button.superview = detailView;

        button.userInteractionEnabled = YES;

        [annotationView setRightCalloutAccessoryView:detailView];

    }


return annotationView;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view    calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(@"calloutAccessoryControlTapped");
}

-(void)btnDetailPressed:(id)sender
{
NSLog(@"btnDetailPressed");
}

当我点击按钮或在DetailView内部时,不会调用/触发btnDetailPressed或calloutAccessoryControlTapped。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

使用MKMapViewDelegate的方法mapView:didSelectAnnotationView:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[YOUR_CUSTOM_CLASS class]]) {
        //customize it
    }
}

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    if ([view isKindOfClass:[YOUR_CUSTOM_CLASS class]]) {
        //do something
    }
}

Apple's doc