Я должен использовать MKAnnotation, MKAnnotationView или MKPinAnnotation? - PullRequest
5 голосов
/ 29 октября 2011

Я звоню в веб-сервис и строю некоторые объекты в MapView.

Что я не понимаю, так это использовать MKAnnotationPoint или MkAnnotationView?Я не уверен.Когда я использую MKAnnotation, контакты отображаются на карте, если я нажимаю на них, они показывают мне заголовок и подзаголовок.

Если я использую MKAnnotationView, контакты отображаются, но когда я нажимаю на них,ничего не происходит.

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

Вот пример моего кода.

    MKPointAnnotation mk = new MKPointAnnotation();
MKAnnotationView mkView = new MKAnnotationView();
mk.Coordinate = coord;
mk.Title = tl.Name;
mk.Subtitle = DateTime.Now.ToShortDateString();
mkView.Annotation = mk;             
mapView.AddAnnotationObject(mkView);

Так что, если я сделаю вышеупомянутое - булавки обнаружатся, но я не могу щелкнуть по любому из них.

Если я просто использую:

mapView.AddAnotationObject(mk); //not using the MkAnnotationView

Затем они все появляются и кликабельны.Я пока не знаю, как добавить к ним правую кнопку вызова.Это вторая часть вопроса.

Спасибо.

1 Ответ

12 голосов
/ 29 октября 2011

Я не использовал MonoTouch, но использование SDK такое же, как и iOS, я считаю.

MKAnnotation - это протокол / интерфейс, на котором будет основана ваша модель данных аннотаций. Вы также можете использовать предопределенный класс MKPointAnnotation (который реализует интерфейс MKAnnotation) для объектов модели данных аннотации вместо создания пользовательского класса, если вам нужны только title, subtitle и coordinate .

MKAnnotationView - это то, как должен отображаться вид аннотации, и задается в методе делегата вида viewForAnnotation карты (не создается встроенным). Представления аннотаций можно повторно использовать между несколькими объектами аннотаций, которые будут иметь одинаковый внешний вид (например, изображение булавки). Поэтому теоретически один экземпляр MKAnnotationView может использоваться для нескольких объектов аннотаций, которые реализуют MKAnnotation (при условии, что они не все отображаются на экране одновременно).

Таким образом, вы создаете объект на основе MKAnnotation и передаете его в вызове addAnnotation (то есть. AddAnnotationObject). Затем в методе делегата viewForAnnotation вы создаете и возвращаете экземпляр объекта MKAnnotationView.

"MKPinAnnotation" (на самом деле MKPinAnnotationView) - это предопределенный подкласс MKAnnotationView, который обеспечивает изображение вывода по умолчанию. Вы можете вернуть экземпляр MKPinAnnotationView в методе делегата viewForAnnotation вместо разработки пользовательского представления.

Место, где вы могли бы создать нужную вспомогательную кнопку выноски, находится в методе делегата viewForAnnotation. Вы создаете UIButton типа UIButtonTypeDetailDisclosure и устанавливаете его как представление аннотации rightCalloutAccessoryView.

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

Указанные имена методов приведены в iOS, но имена в MonoTouch должны быть похожими.

...