MapView Annotation l'action lors de l'ouverture Callout

voix
0

J'ai un MapView avec plusieurs annotations. Chaque annotation a une leftCalloutAccessoryView qui est une classe UIViewController. La raison en est que je veux que chaque annotation pour charger des données à partir du serveur, et ajouter le résultat de ces données à la SUBTITLE annotation. Tout cela fonctionne parfaitement, sauf que je ne veux pas charger toutes les données lorsque mon application est lancée, mais je veux l'appel à distance à faire que lorsque la bulle est ouverte callout.

Est-ce que quelqu'un sait comment je peux le faire? Le viewWillload, viewDidLoad ect. ne fonctionnent pas dans ce cas. Tous les exemples aussi bien?

Créé 12/04/2010 à 13:21
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Je résolu la question en ajoutant un observateur. L'observateur fait alors sa chose et après que la légende se présente.

Quelque chose que j'ai eu des problèmes avec est que je ne pouvais pas mettre à jour les informations contenues dans la bulle de la bulle après callout apparaît. La seule façon de le faire est de créer votre propre bulle callout (si je comprends bien), ce qui est quelque chose que je ne me sentais pas comme étant donné que je une date limite. Je fixe en ajoutant un UIView supplémentaire avec un alpha et sur un texte « Obtenir des données d'emplacement ... ». Je montre simplement jusqu'à ce point de vue en appuyant sur un emplacement et quand l'observateur est fait, je me cache à nouveau la vue (hors cours à l'aide d'une animation).

Espérons que ma réponse a aidé d'autres.

Code:

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

Code plus:

- (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 mettre cela juste après le @ de synthétisent:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
Créé 19/04/2010 à 19:54
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more