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.