I\'ve got a mapkit app that places annotations on the map, when you press them, it shows the callout with the title attribute.
This works fine, but the user cannot c
Anna explain good.Also I want to explain with exactly code. You can do like this
UITapGestureRecognizer *tapMap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeCallout:)];
[self.mapView addGestureRecognizer:tapMap];
-(void) closeCallout:(UIGestureRecognizer*) recognizer
{
for (id<MKAnnotation> ann in mapView.selectedAnnotations)
{
[mapView deselectAnnotation:ann animated:NO];
}
}
You can implement the UIGestureRecognizerDelegate
method gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: and return YES
(so the map view's own tap gesture recognizer will execute its method as well).
First, add the protocol declaration to your view controller's interface (to avoid a compiler warning):
@interface MyViewController : UIViewController <UIGestureRecognizerDelegate>
Next, set the delegate
property on the gesture recognizer:
tap.delegate = self;
Finally, implement the method:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:
(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
If that doesn't work out for some reason, you can alternatively de-select any currently selected annotation manually at the top of the handleTap:
method:
for (id<MKAnnotation> ann in mapView.selectedAnnotations) {
[mapView deselectAnnotation:ann animated:NO];
}
Even though the map view only allows a maximum of one annotation to be selected at a time, the selectedAnnotations
property is an NSArray
so we loop through it.