2

MKMapViewを使用してアプリに取り組んでいます

いくつかの注釈があり、注釈画像をクリックすると詳細が表示されます

そのために、カスタム @interface Annotation : 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 は呼び出されません/トリガーされません。

助言がありますか?

4

1 に答える 1

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
    }
}

アップルのドキュメント

于 2012-12-02T00:10:20.530 に答える