MKPinAnnotationView - разные действия в разных пинах

У меня есть вопрос о MKPinAnnotationView. Сначала я ввел координаты выводов, а затем вызвал viewForAnnotation, чтобы построить их, а также добавил их правую кнопку.

Но мой вопрос, как я могу выбрать различные действия для этих контактов?

Когда я ищу тег кнопки в NSLog, он всегда показывает 0 для каждого контакта, поэтому я не могу сделать это с тегами.

Вот код кнопки, если это что-то значит:

for (int i=0;i<=[[mapview annotations]count];i++) {
    pinView.tag = i ;
    rightButton.tag=i;
}

1 ответ

Решение

Вам не нужно (и не следует) использовать теги.

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

Вам даже не нужно создавать свой собственный метод действия. При нажатии на кнопку выноски вид карты вызовет calloutAccessoryControlTapped метод делегата, который дает вам ссылку на аннотацию (т.е. view.annotation). Если вы решили использовать метод делегата, удалите addTarget от viewForAnnotation и просто реализовать метод делегата.

Если по какой-то причине вы хотите использовать свой собственный метод действия, вы можете определить, какая аннотация была выбрана, взглянув на вид карты. selectedAnnotations имущество. Выбранная аннотация будет иметь индекс 0 (сначала убедитесь, что массив count не ноль).


Для примера кода всего вышеупомянутого, посмотрите этот вопрос:
Как сохранить данные, связанные с MKAnnotation, от потери после всплывающего вызова и нажатия пользователем кнопки раскрытия?

Другие вопросы по тегам