/ / CallView Annotation Action de légende à l'ouverture - iphone, annotations, mapkit, mkannotationview

Action Callout Annotation MapView lorsqu’elle est ouverte - iphone, annotations, mapkit, mkannotationview

J'ai un mapview avec plusieurs annotations. Chaque annotation a un leftCalloutAccessoryView qui est une classe UIViewController. La raison en est que je veux que chaque annotation charge des données du serveur et ajoute le résultat de ces données au sous-titre d'annotation. Tout cela fonctionne parfaitement, sauf que je ne souhaite pas charger toutes ces données au démarrage de mon application, mais je souhaite que l'appel distant ne soit effectué que lorsque la bulle de légende est ouverte.

Est-ce que quelqu'un sait comment je peux faire ça? Le viewWillload, viewDidLoad ect. ne fonctionne pas dans ce cas. Des exemples aussi?

Réponses:

2 pour la réponse № 1

J'ai résolu le problème en ajoutant un observateur. L'observateur fait ensuite son travail et après cela, la légende apparaît.

Quelque chose qui me pose problème, c’est que je ne pouvais pasmettre à jour les informations dans la bulle de légende après son affichage. La seule façon de le faire est de créer votre propre bulle de légende (si je comprends bien), ce que je n’avais pas l’impression de ressentir étant donné que j’avais une date limite. J'ai corrigé cela en ajoutant un UIView supplémentaire avec un alpha et un texte "Obtenir les données de localisation ...". Je viens d'afficher cette vue lorsque vous appuyez sur un emplacement et lorsque l'observateur a terminé, je masque à nouveau la vue (bien sûr à l'aide d'une animation).

J'espère que ma réponse a aidé les autres.

Code:

[pin addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:GMAP_ANNOTATION_SELECTED];

Un peu plus de code:

- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context{

NSString *action = (NSString*)context;

MKAnnotationView *annotationView = [(MKAnnotationView*)object retain];
BikeAnnotation *bike = [[annotationView annotation] retain];

if([action isEqualToString:GMAP_ANNOTATION_SELECTED] && [[bike _stationType] intValue] != 5 && [[bike _stationType] intValue] != 6){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
if (annotationAppeared) {
NSLog(@"Annotation selected");
else {
NSLog(@"annotation deselected");
}
}
}

Et mettez ceci juste après le @synthesize "s:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";