I have a map with only one annotation.I created a simple class which I want it to show when the user clicks on the annotation.The problem is that when I click on the annotation nothing happens.
Here is my code:
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark{
NSLog(@"Reverse Geocoder completed");
mPlacemark=placemark;
[mapView addAnnotation:placemark];
}
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];
annView.animatesDrop=TRUE;
//create UIButton for annotation
UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
//NSInteger annotationValue = [self.annotations indexOfObject:annotation];
[detailButton addTarget:self action:@selector(showDetailView:) forControlEvents:UIControlEventTouchUpInside];
annView.rightCalloutAccessoryView=detailButton;
return annView;
}
-(void)showDetailView:(id)sender{
NSLog("inside the stupid method");
MyDetailViewController *detailView=[[MyDetailViewController alloc] initWithNibName:@"MyDetailViewController" bundle:nil];
[[self navigationController] pushViewController:detailView animated:YES];
[detailView release];
}
My showDetailView function never gets called.Please help me.I’m new to iphone and I might forget a simple thing.Thanks
Still not working!!!!
First, check that the map view’s
delegateis set otherwise yourviewForAnnotationmethod will not get called.Next, the accessory button appears on the annotation’s callout which will only appear if you set
canShowCallout:Next, instead of using your own method to handle the button action, it’s much better to use the map view’s own
calloutAccessoryControlTappeddelegate method which gets called when tapping an accessory:Remove the
[detailButton addTarget...line fromviewForAnnotation.Also note your
NSLogin the showDetailView method is missing the leading@which will result in a crash when the method does get called.Another thing is you should use
dequeueReusableAnnotationViewWithIdentifierinviewForAnnotationto enable annotation view re-use.Example as requested: