iPad MapKit - перевыбор одного пина не работает - PullRequest
1 голос
/ 01 мая 2011

У меня следующая проблема:

У меня есть несколько значков на моей карте. После прикосновения к одному открывается пользовательское всплывающее окно и отображается информация. Это прекрасно работает.

Моя проблема в том, что если вы дважды выбрали один и тот же значок, всплывающие окна не открываются, вам нужно прикоснуться к другому или щелкнуть в каком-либо месте карты.

Мой код следующий:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
    MKAnnotationView* annotationView = nil;
    CPPointOfInterest *myAnnotation = (CPPointOfInterest*) annotation;

    if ([myAnnotation isKindOfClass:[MKUserLocation class]] || myAnnotation.poi_id <= 0) {
        return nil;

    } else {
        NSString* identifier = @"Pin";
        MKPinAnnotationView* annView = (MKPinAnnotationView*)[mv_map dequeueReusableAnnotationViewWithIdentifier:identifier];

        if(nil == annView) {
            annView = [[[MKPinAnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:identifier] autorelease];
        }

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

        if(self.nearest_poi == myAnnotation) {
            annView.pinColor = MKPinAnnotationColorGreen;

        } else {
            annView.pinColor = MKPinAnnotationColorRed;

        }

        annView.animatesDrop = YES;

        annotationView = annView;

        [annotationView setEnabled:YES];
        [annotationView setCanShowCallout:NO];

        return annotationView;

    }
}

Наблюдатель:

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

    NSString *action = (NSString*)context;
    if([action isEqualToString:@"GMAP_ANNOTATION_SELECTED"]){
        BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
        if (annotationAppeared) {
            // show popup
            } 
    }
}

Я также попробовал метод didSelectAnnotationView, он также работает только для события первого щелчка.

Я искал несколько часов, но ничего не нашел ...: /

Кто-нибудь знает решение моей проблемы, пожалуйста, дайте мне подсказку ...

Спасибо и привет, Mathew

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Вам необходимо отменить выбор аннотации в mapView, прежде чем вы сможете выбрать ее снова.Попробуйте следующее:

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{

[mapView deselectAnnotation:view.annotation animated:NO];

}
1 голос
/ 18 августа 2011

Я использую поповер для отображения информации:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    if (popover)
    {
        [popover release];
        popover = nil;
    }

    LocatorSearchDealer *dealer = [[mapView selectedAnnotations] objectAtIndex:0];

    //without this line I cannot immediately reselect the same annotation.
    [mapView deselectAnnotation:dealer animated:NO];
}
...