¿La acción del botón en la vista mkannotation no funciona?

Hola, me he quedado atrapado en una situación en el mapa donde he logrado mostrar la anotación personalizada. Cuando se toca la anotación, debo mostrar una vista con información y un botón. cuando el usuario toca el botón, debe mostrarse una alerta.

el código es el siguiente

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { if (![view.annotation isKindOfClass:[MKUserLocation class]]) { POCustomAnnotation *annotation = (POCustomAnnotation *)[view annotation]; UIView *bgview=[[UIView alloc]initWithFrame:CGRectMake(-30, -150,130, 150)]; bgview.backgroundColor=[UIColor grayColor]; UILabel *templbl=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 130, 120)]; templbl.text=annotation.displayText; templbl.textAlignment=NSTextAlignmentRight; templbl.numberOfLines=10; [bgview addSubview:templbl]; UIButton *tembtn=[UIButton buttonWithType:UIButtonTypeCustom]; [tembtn setTitle:@"More info" forState:UIControlStateNormal]; [tembtn addTarget:self action:@selector(annotationBtnAction:) forControlEvents:UIControlEventTouchUpInside]; tembtn.backgroundColor=[UIColor grayColor]; tembtn.frame=CGRectMake(0, 121, 130, 30); [bgview addSubview:tembtn]; [view addSubview:bgview]; } else { POMapAnnotationView *callout = (POMapAnnotationView *)[[[NSBundle mainBundle]loadNibNamed:@"POMapAnnotationView" owner:self options:nil] objectAtIndex:0]; view.canShowCallout = NO; CGRect calloutViewFrame = callout.frame; calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size.width / 2 + 15, - calloutViewFrame.size.height); callout.frame = calloutViewFrame; [callout setLabelText:[self distanceText]]; [view addSubview:callout]; } } 

Estoy tratando de manejar esto

  [tembtn addTarget:self action:@selector(annotationBtnAction:) forControlEvents:UIControlEventTouchUpInside]; 

que no está siendo llamado. y mi pantalla se ve así

enter image description here

Gracias por adelantado

Necesita establecer el marco para este botón. que realmente no se ve en el código. Ajuste el marco como lo desee por x posición y posición y.

 UIButton *tembtn=[UIButton buttonWithType:UIButtonTypeCustom]; // Frame required to render on position and size. Add below line [tembtn setFrame:CGRectMake(0, 0, 100, 50)]; [tembtn setTitle:@"More info" forState:UIControlStateNormal]; [tembtn addTarget:self action:@selector(annotationBtnAction:) forControlEvents:UIControlEventTouchUpInside]; tembtn.backgroundColor=[UIColor grayColor]; [view addSubview:tembtn]; 

Editar:

Encontré la razón por la que solo puede tocar el área, en la cual se representa la anotación.

Aquí hay una demostración simple para llamadas personalizadas:

Demostración Callout personalizado

enter image description here