2010-10-22 32 views
0

J'ai une carte avec quelques épingles dessus. Les broches chargent la longitude et la latitude à partir d'un plist. J'ai également ajouté une vue de détail où vous obtenez plus d'informations sur la broche qui est engagée. Cependant, mon problème est que lorsque je tape sur une broche (discloseButton ofc) et que je suis poussé vers la vue de détail, c'est toujours la dernière donnée qui charge (à partir du plist). Peu importe quelle broche je tape.MKMapView - Toujours montrer le dernier élément (dans mon plist) dans Deatilview en tapant une épingle

Par exemple:
article 1 - titre: voiture
article 2 - Titre: balle
point 3 - Titre: livre
article 4 - titre: vélo

Donc, si je tape sur la broche nr 1 le titre dans la vue de détail est la bicyclette. Si je tape sur la broche n ° 2, le titre de la vue de détail est vélo et ainsi de suite. Espérons que vous obtenez le point :)

(Désolé pour le mauvais titre ne pouvait pas arriver à un meilleur.)

Merci!

est ici un code si cela aide:

RootViewController.m

- (void)viewDidLoad { 
[super viewDidLoad]; 

    self.title = @"Map"; 

    map.delegate = self; 

    cam = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
                pathForResource:@"Cam" 
                ofType:@"plist"]]; 

    double minLat = [[cam valueForKeyPath:@"@min.latitude"] doubleValue]; 
    double maxLat = [[cam valueForKeyPath:@"@max.latitude"] doubleValue]; 
    double minLon = [[cam valueForKeyPath:@"@min.longitude"] doubleValue]; 
    double maxLon = [[cam valueForKeyPath:@"@max.longitude"] doubleValue]; 

    MKCoordinateRegion region; 
    region.center.latitude = (maxLat + minLat)/2.0; 
    region.center.longitude = (maxLon + minLon)/2.0; 
    region.span.latitudeDelta = (maxLat - minLat) * 1.05; 
     region.span.longitudeDelta = (maxLon - minLon) * 1.05; 
    map.region = region; 

    for (NSDictionary *camDict in cam){ 
     annotationTest = [[MyAnnotation alloc] initWithDictionary:camDict]; 
     [map addAnnotation:annotationTest]; 
     [annotationTest release]; 
    } 
} 


// AnnotatioView 
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ 

    MKPinAnnotationView *annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]; 
    [annView setAnimatesDrop:YES]; 
    [annView setCanShowCallout:YES]; 
    [annView setSelected:YES]; 
    [annView setUserInteractionEnabled: YES]; 

    UIButton *discloseButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure]; 
    [discloseButton addTarget: self action: @selector(showMyView:) forControlEvents: UIControlEventTouchUpInside]; 
    annView.rightCalloutAccessoryView = discloseButton; 

    return annView; 
} 

//Push the detailView with some data 
- (IBAction)showMyView:(id)sender { 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 

    detailViewController.title = annotationTest.title; 
    detailViewController.tempAdress = annotationTest.subtitle; 
    detailViewController.tempUrl = annotationTest.url; 

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

Comment définir 'annotationTest'? – jv42

+0

MyAnnotation * annotationTest; dans RootViewController.h – johannes

Répondre

0

Yay, réparé! Voici ce que j'ai fait.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ 

    MKPinAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]; 
    [pin setAnimatesDrop:YES]; 
    [pin setCanShowCallout:YES]; 
    [pin setSelected:YES]; 
    [pin setUserInteractionEnabled: YES]; 

    pin.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

    return pin; 
} 

- (void)mapView:(MKMapView *)mv annotationView:(MKAnnotationView *)pin calloutAccessoryControlTapped:(UIControl *)control { 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 

    detailViewController.title = pin.annotation.title; 

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

Alors annotationTest est défini est RootViewController (pas votre annotation) (si logicly le dernier si vous remplaciez). utilisez l'expéditeur (id) pour récupérer vos données d'annotation.

+0

Ah je vois, mais comment puis-je récupérer les données d'annotation? detailViewController.title = annotation.title - quelque chose quelque chose? – johannes

+0

Je ne sais pas comment vous avez créé la classe MyAnnotation avec le dictionnaire. Mais quelque chose comme [sender.dictionary objectForKey: @ "title"] –

+0

J'ai créé le dictionnaire dans MyAnnotation.m: - (id) initWithDictionary: (NSDictionary *) dict { \t self = [super init]; \t if (self! = Nil) { \t \t coordonnée.latitude = [[dict objectForKey: @ "latitude"] doubleValue]; \t \t coordinate.longitude = [[dict objetForKey: @ "longitude"] doubleValue]; \t \t self.title = [dict objetForKey: @ "nom"]; \t \t self.subtitle = [dict objectForKey: @ "adresse"]; \t} \t retournez-vous; } – johannes