iPhone MKMapView аннотации наблюдателей выбираются один раз - PullRequest
3 голосов
/ 17 сентября 2010

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

Вверху MapViewController.m:

static NSString* const ANNOTATION_SELECTED_DESELECTED = @"annotationSelectedOrDeselected";

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

    // Enable the view.
    [annotationView setEnabled:YES];

    // Delete the default popup.
    [annotationView setCanShowCallout:NO];

    // Add an observer on the annotation.
    [annotationView addObserver:self
                     forKeyPath:@"selected"
                        options:NSKeyValueObservingOptionNew
                        context:ANNOTATION_SELECTED_DESELECTED];

    return annotationView;
}

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

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

    if ([action isEqualToString:ANNOTATION_SELECTED_DESELECTED]) {
        BOOL annotationSelected = [[change valueForKey:@"new"] boolValue];

        if (annotationSelected) {
            // Actions when annotation selected.
            // I create the appropriate popover here and display it in self.view
        }
    } else {
        // Actions when annotation deselected.
        NSLog(@"Annotation deselected! But never pass here...");
    }
}

Моя проблема в том, что когда мой поповер закрывается, если я хочу выбрать ту же аннотацию, она просто не работает ... Например, если состояние наблюдателя все еще "активировано". Поэтому, чтобы выбрать мою аннотацию, мне нужно выбрать другую, а затем я могу выбрать ее снова ... Это раздражает, когда я не могу выбрать одну и ту же аннотацию дважды подряд.

Пожалуйста, помогите мне! Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 ноября 2010

Я использовал [mapview deselectAnnotation:annotation animated:FALSE]; Я думаю, что это работает до сих пор.

1 голос
/ 20 января 2011

Сохраните имя объекта, переданное в функцию Наблюдать за VALUEForKeyPath, как временный объект, скажем oldObject .

Затем напишите приведенный ниже код в функции, где вы закрываете popOverView.

[mapView deselectAnnotation: [аннотация oldObject] анимированная: НЕТ];

1 голос
/ 17 сентября 2010

Попробуйте изменить: -

BOOL annotationSelected = [[change valueForKey:@"new"] boolValue];

до

BOOL annotationSelected = [[change valueForKey:NSKeyValueObservingOptionNew] boolValue];

Кажется, я сам вспомнил, что имел эту проблему.

...