Advertise here




Advertise here

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with Google Sign In with OpenID
Please do not post the same thing multiple times. The board software automatically flags certain posts as needing moderator attention. This happens the most often for new users. I'm pretty sure this is made clear at the time you attempt to post. Posting the same thing over and over again just makes that many more posts the moderators have to weed through later. This makes us sad. Don't make us sad. If your post/thread doesn't appear, just wait a while. Don't post it again. If it hasn't shown up by the next day, then you can try again. I normally go through posts in the mornings, and try to check a few times throughout the day, but I'm not here 24/7. There will typically be a significant delay before posts are approved. Just be patient.

request help/tutorial-MapKit with callout accessory button shows details of the pin

I have been struggling with this for weeks, it is my school project.

I have multiple pins which shows callout that shows the title and description of the pin. I had set up the pin to show callout accessory view button too but either it has no respond when tapped or the app quit itself / crash.

I had tried many methods that i get from videos, forums, google but still i cant success on this. Anyone can help me on this or provide a tutorial?

Your help is very appreciated. Thanks in advance :)

Here i provide my code with only 1 pin ( i cant success with even only 1 pin :confused:)

#import \"MapViewController.h\"
#import \"DetailViewController.h\"
#import \"BridgeAnnotation.h\"

enum
{
kCityAnnotationIndex = 0,
kBridgeAnnotationIndex
};

@implementation MapViewController

@synthesize mapView, detailViewController, mapAnnotations;


#pragma mark -

+ (CGFloat)annotationPadding;
{
return 10.0f;
}
+ (CGFloat)calloutHeight;
{
return 40.0f;
}

- (void)gotoLocation
{
// start off by default in San Francisco
MKCoordinateRegion newRegion;
newRegion.center.latitude = 37.786996;
newRegion.center.longitude = -122.440100;
newRegion.span.latitudeDelta = 0.112872;
newRegion.span.longitudeDelta = 0.109863;

[self.mapView setRegion:newRegion animated:YES];
}

- (void)viewDidAppear:(BOOL)animated
{
// bring back the toolbar
[self.navigationController setToolbarHidden:NO animated:NO];
}

- (void)viewDidLoad
{
self.mapView.mapType = MKMapTypeStandard; // also MKMapTypeSatellite or MKMapTypeHybrid

// create a custom navigation bar button and set it to always says \"Back\"
UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @\"Back\";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];

// create out annotations array (in this example only 2)
self.mapAnnotations = [[NSMutableArray alloc] initWithCapacity:2];

// annotation for Golden Gate Bridge
BridgeAnnotation *bridgeAnnotation = [[BridgeAnnotation alloc] init];
[self.mapAnnotations insertObject:bridgeAnnotation atIndex:kBridgeAnnotationIndex];
[bridgeAnnotation release];

[self gotoLocation]; // finally goto San Francisco
}

- (void)viewDidUnload
{
self.mapAnnotations = nil;
self.detailViewController = nil;
self.mapView = nil;
}

- (void)dealloc
{
[mapView release];
[detailViewController release];
[mapAnnotations release];

[super dealloc];
}


#pragma mark -
#pragma mark ButtonActions

- (IBAction)bridgeAction:(id)sender
{
[self gotoLocation];
[self.mapView removeAnnotations:self.mapView.annotations]; // remove any annotations that exist

[self.mapView addAnnotation:[self.mapAnnotations objectAtIndex:kBridgeAnnotationIndex]];
}

#pragma mark -
#pragma mark MKMapViewDelegate

- (void)showDetails:(id)sender
{
// the detail view does not want a toolbar so hide it
[self.navigationController setToolbarHidden:YES animated:NO];

[self.navigationController pushViewController:self.detailViewController animated:YES];
}

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// if it's the user location, just return nil.
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;

// handle our two custom annotations
//
else // for Golden Gate Bridge
{
// try to dequeue an existing pin view first
static NSString* BridgeAnnotationIdentifier = @\"bridgeAnnotationIdentifier\";
MKPinAnnotationView* pinView = (MKPinAnnotationView *)
[mapView dequeueReusableAnnotationViewWithIdentifier:BridgeAnnotationIdentifier];
if (!pinView)
{
// if an existing pin view was not available, create one
MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:BridgeAnnotationIdentifier] autorelease];
customPinView.pinColor = MKPinAnnotationColorPurple;
customPinView.animatesDrop = YES;
customPinView.canShowCallout = YES;

// add a detail disclosure button to the callout which will open a new view controller page
//
// note: you can assign a specific call out accessory view, or as MKMapViewDelegate you can implement:
// - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control;
//
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;

return customPinView;
}
else
{
pinView.annotation = annotation;
}
return pinView;
}

return nil;
}

@end
Post edited by kylie_bennington on

Replies

Sign In or Register to comment.