2 votes

Vue d'appel personnalisée avec un bouton sur un MKMapview dans iOS 3.0

J'ai créé une sous-classe de MKAnnotationView qui, lorsqu'elles sont sélectionnées, affichent une vue d'appel (similaire à MKPinAnnotationView), qui n'est qu'une sous-classe de UIView avec un bouton et du texte pour le moment. Le texte est ajouté à la vue d'annotation. Le problème que j'ai, c'est que le bouton que j'ai placé dans la vue d'annotation ne déclenche jamais aucune action, il ne semble pas répondre à l'événement tactile.

La raison pour laquelle je crée un nouveau MKAnnotationView c'est parce que j'ai besoin d'afficher plus plus que du texte et deux boutons dans la vue d'annotation et je n'ai pas trouvé de moyen d'y parvenir avec la version normale MKPinAnnotationView des callouts.

Code :

- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation {
    if(![annotation isKindOfClass:[CSMapAnnotation class]])
        return nil;

    CSMapAnnotation* csAnnotation = (CSMapAnnotation*)annotation;

    CustomAnnotation *customAnnotationView=[[[CustomAnnotation alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease];
    MKPinAnnotationView* pin = nil; pin = [[[MKPinAnnotationView alloc] initWithAnnotation:customAnnotationView reuseIdentifier:@"identifier"] autorelease];
    [pin setPinColor: MKPinAnnotationColorRed ];
    MKAnnotationView *annotationView = pin;

    annotationView.canShowCallout = YES;
    [pin setPinColor:(csAnnotation.annotationType == CSMapAnnotationTypeStart) ? MKPinAnnotationColorGreen : ((csAnnotation.annotationType == CSMapAnnotationTypeCarLocation)? MKPinAnnotationColorPurple:MKPinAnnotationColorRed) ];

    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0,0,85,25)];
    [leftView setBackgroundColor:[UIColor clearColor]];

    UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [shareButton setBackgroundImage:[UIImage imageNamed:@"share.png"] forState:UIControlStateNormal];
    [shareButton setFrame:CGRectMake(19+GAP, 0, 25, 25)];
    [shareButton addTarget:self action:@selector(shareButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    [leftView addSubview:shareButton];

    UIButton *setAlertButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [setAlertButton setBackgroundImage:[UIImage imageNamed:@"alert.png"] forState:UIControlStateNormal];
    [setAlertButton setFrame:CGRectMake(shareButton.frame.origin.x+shareButton.frame.size.width+GAP, 0, 25, 25)];
    [setAlertButton addTarget:self action:@selector(alertButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    [leftView addSubview:setAlertButton];

    annotationView.rightCalloutAccessoryView = leftView;
    [leftView release];

    return annotationView;
}

-(void)shareButtonAction:(id)sender {
   NSLog(@"%s",_cmd);
}

L'action shareButtonAction n'est pas appelée lorsque je clique sur le bouton shareButton...


J'ai également vérifié le délégué ci-dessus, mais il n'est pas appelé lorsqu'il est installé sur l'iPhone 3.0. Ce délégué sera appelé si je n'ai qu'un seul bouton dans le callout de droite mais (dans le cas ci-dessus) il n'est pas appelé lorsque l'on ajoute une vue avec deux boutons. Cela se produit dans l'iPhone 3.0.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X