Аннотации MKMapView не выбираются второй раз

В моем приложении iPad я использую карту iOS, чтобы отображать несколько точек, используя аннотацию. Я хочу также отображать настраиваемую выноску, когда была выбрана аннотация. Я использую UIPopoverController для отображения выноски. Однако это работает только при первом обращении к аннотации. Если я хочу увидеть выноску в одной аннотации, сначала нужно выбрать другую аннотацию, а затем нажать предыдущую аннотацию.

В основном этот метод делегата не запускается второй раз.

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

Я использую раскадровку, и там установлен делегат. Вот как я установил аннотации.

[self.mapView addAnnotations:self.placemarksArray] 

Может кто-нибудь, пожалуйста, дайте мне знать причину вышеуказанного вопроса? Благодаря

Ответ 1

Документация для метода делегата didSelectAnnotationView говорит об этом в разделе "Обсуждение":

Вы можете использовать этот метод для отслеживания изменений в состоянии выбора представлений аннотаций.

(Я добавил полужирный и курсив на слово "изменения".)

Это означает, что метод делегата запускается только тогда, когда состояние представления аннотации изменяется с "не выбран" на "выбранный".


Чтобы избежать необходимости использовать другую аннотацию или карту (которая изменяет состояние выбранной аннотации на "не выбрано" ) и снова обнаруживать "выбор" в той же аннотации, вы можете принудительно отменить выбор в верхней части метод didSelectAnnotationView:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    [mapView deselectAnnotation:view.annotation animated:YES];

    //existing code to handle tap on annotation...
}

Ответ 2

Версия Swift 3:

mapView.deselectAnnotation(view.annotation, animated: true)