Hello i have stuck in one situation on map where i have managed to show custom annotation. When the annotation is tapped i have to show a view with some information and one button. when user taps on the button then one alert should display.
code is as follows
- (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];
}
}
I am trying to handle this
[tembtn addTarget:self action:@selector(annotationBtnAction:)
forControlEvents:UIControlEventTouchUpInside];
which is not getting called. and my screen looks like this
Thanks in advance
You need to set frame for this button. which is not really seen in the code. Adjust frame as you want by x position and y position.
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];
Edit:
Found the reason you can only tap on area, in which annotation is rendered.
Here is simple demo for custom call out:
Custom Callout Demo
来源:https://stackoverflow.com/questions/27519517/button-action-in-mkannotation-view-not-working