SelectAnnotation отменяет выбор также в Xamarin IOS - PullRequest
0 голосов
/ 07 ноября 2019

Я попытался выбрать аннотацию программно. Так что в моем собственном рендере карт я использовал это.

    _iosMap.SelectAnnotation(myAnnotation, true);

myAnnotation был выбран правильно, но сразу после этого он был отменен. (Информационное окно показалось на секунду, а потом исчезло) Понятия не имею, почему. Я имею в виду, когда пользователь нажимает в определенных регионах, моя программа добавляет аннотацию к карте, и сразу после этого она вызывает SelectAnnotation для отображения информационного окна.

Я пытался реализовать это решение .

    void OnDidDeselectAnnotationView(object sender, MKAnnotationViewEventArgs e) {
     MKMarkerAnnotationView annotationView = (MKMarkerAnnotationView) e.View;
    
     if (someBoolToDetectUnwantedDeselect) {
      _iosMap.SelectAnnotation(annotationView.Annotation, true);
     }
    }

Но это не сработало. Я имею в виду, что выделена аннотация (запущен метод OnDidSelectAnnotationView.) Но информационное окно не появилось. Как я могу решить эту проблему?

Я пытался использовать GestureRecognizerShouldBegin (видел это здесь .) Но при выборе отмените выбор GestureRecognizerShouldBegin не сработал.

Добавление: я воспроизводилпроблема здесь.

http://www.mediafire.com/file/s1ahsdum258yqpk/selectannotationproblem.rar/file

При нажатии на карту в любом месте, кроме вывода SelectAnnotation, запускается в CustomMapRenderer. Информационное окно показывает на секунду, что оно исчезает.

Когда я добавил это в OnDidDeselectAnnotationView

((MKMapView)Control).SelectAnnotation(((MKMapView)Control).Annotations.ElementAt(0), true);

In исчезает при первом нажатии, как и раньше. И на втором, третьем нажатиях все работает нормально. Почему сначала?

1 Ответ

0 голосов
/ 07 ноября 2019

Я решил это, добавив задержку.

private void OnTap(UITapGestureRecognizer recognizer)
{
   //
    PerformSelector(new ObjCRuntime.Selector("ShowAnnotation"), null, 0.6f);
}

[Export("ShowAnnotation")]
void ShowAnnotation()
{
    ((MKMapView)Control).SelectAnnotation(((MKMapView)Control).Annotations.ElementAt(0), true);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...