Возможно, это не лучшее решение, но оно определенно работает. Прежде всего, я попробовал несколько вещей, таких как наблюдение за контекстом и тому подобное, но я никогда не терпел крах, и это казалось громоздким. Итак, вот что я сделал:
Сначала я указал, что является контролирующим фактором для сохранения возможности просмотра предупреждений. В моем случае я создал пользовательский вид аннотации, и всякий раз, когда пользователь нажимает кнопку в этом пользовательском представлении, я хочу, чтобы он оставался видимым и, возможно, даже менял содержимое. Итак, я установил делегата в этом пользовательском представлении, чтобы моя карта могла знать, когда что-то меняется. В моем контроллере представления карты я ловлю это сообщение и устанавливаю переменную члена класса в значение true, чтобы показать, что я хочу, чтобы представление аннотации оставалось.
ПРИМЕЧАНИЕ. Это произойдет до того, как появятся сообщения выбора.
Теперь в моем методе didDeselectAnnotation я проверяю логическое значение. Если я хочу, чтобы он оставался видимым, я выбираю НЕ удалять свою аннотацию, я сбрасываю логическое значение, и я повторно выбираю аннотацию вручную, устанавливая анимацию на НЕТ. Это позволяет представлению аннотации «оставаться» видимым - возможно, читом, но пользователь не может видеть разницу. Всякий раз, когда это логическое значение говорит, что отмена выбора в порядке, я просто удаляю аннотацию, и все в порядке.
Итак, рабочий процесс такой:
- Сенсорный штифт
- Отображается CustomAnnotationView
- Пользователь нажимает кнопку в CustomAnnotationView, которая уведомляет делегата (mapView), что
произошло действие
- Установите логическое значение класса, чтобы знать, что вы хотите оставить аннотацию около
- mapView затем вызывает метод didDeselectAnnotation
- В методе didDeselectAnnotation используйте условное решение, чтобы решить, следует ли удалять аннотацию, или сохраните ее, не удаляя аннотацию и повторно выбирая ее вручную без анимации.
Надеюсь, это поможет другим. Мне понадобилось время, чтобы понять это, поэтому я надеюсь, что это сэкономит вам время.
Если вы найдете лучшее решение, пожалуйста, опубликуйте его здесь!