Reputation: 6614
I'm not sure why the detail disclosure button is not appearing on the mapkit callout. Here's my code:
I made sure to include in the .h file and then the following methods. The callout works and appears right after the map loads. I also made sure to hook up the delegate in the Xib file.
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *mapPin = nil;
if(annotation != map.userLocation)
{
static NSString *defaultPinID = @"defaultPin";
mapPin = (MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (mapPin == nil )
{
mapPin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:defaultPinID];
mapPin.canShowCallout = YES;
UIButton *disclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[disclosureButton addTarget:self action:@selector(clDetails:) forControlEvents:UIControlEventTouchUpInside];
mapPin.rightCalloutAccessoryView = disclosureButton;
}
else
mapPin.annotation = annotation;
}
return mapPin;
}
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
id<MKAnnotation> myAnnotation = [self.mapView.annotations objectAtIndex:0];
[self.mapView selectAnnotation:myAnnotation animated:YES];
}
thanks for any help.
Upvotes: 2
Views: 1523
Reputation: 701
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{ // if it's the user location, just return nil. if ([annotation isKindOfClass:[MKUserLocation class]]) return nil;
// try to dequeue an existing pin view first
static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
pinView.draggable = NO;
pinView.annotation = annotation;
pinView.draggable = YES;
pinView.enabled = YES;
pinView.exclusiveTouch = YES;
pinView.highlighted = YES;
pinView.multipleTouchEnabled = YES;
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.userInteractionEnabled = YES;
//button on the right for popup for pins
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView = rightButton;
//Create and add the right button to the callout
rightCalloutButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[pinView setRightCalloutAccessoryView:rightButton];
[self updateAnnotation];
[self crawlViews];
//zoom button on the left of popup for pins
UIButton* leftButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
[leftButton setTitle:annotation.title forState:UIControlStateNormal];
[leftButton addTarget:self
action:@selector(zoomToLocation:) forControlEvents:UIControlEventTouchUpInside];
pinView.leftCalloutAccessoryView = leftButton;
UIImageView *profileIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"profile.png"]];
pinView.leftCalloutAccessoryView = profileIconView;
[profileIconView release];
return pinView;
}
Upvotes: 1
Reputation: 6614
I had this line of code in viewDidLoad that was throwing off the MKAnnotation method.
mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];
:)
Upvotes: 1