2017-02-16 16 views
0

В моем приложении я хотел бы, когда пользователь нажмет аннотацию для моих UITextviews, чтобы показать более подробную информацию об этой аннотации, например название, широта и долгота. Моя проблема: я понятия не имею, как получить эту информацию после добавления аннотаций на карту. Вот некоторые из моего кода, который я использую для MKAnnotationView, который только что встроен в мой пользовательский контроллер представлений.Получение текущей информации о аннотации для отображения в представлении в xamarin iOS

MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation) 
    { 
     MKAnnotationView annotationView = mapView.DequeueReusableAnnotation(annotationIdentifier); 
     // Set current location and location of annotation 
     CLLocationCoordinate2D currentLocation = mapView.UserLocation.Coordinate; 
     CLLocationCoordinate2D annotationLocation = annotation.Coordinate; 

     // We don't want a special annotation for the user location 
     if (currentLocation.Latitude == annotationLocation.Latitude && currentLocation.Longitude == annotationLocation.Longitude) 
      return null; 

     if (annotationView == null) 
      annotationView = new MKPinAnnotationView(annotation, annotationIdentifier); 
     else 
      annotationView.Annotation = annotation; 

     annotationView.CanShowCallout = true; 
     (annotationView as MKPinAnnotationView).AnimatesDrop = false; // Set to true if you want to animate the pin dropping 
     (annotationView as MKPinAnnotationView).PinColor = MKPinAnnotationColor.Red; 
     annotationView.SetSelected(true, false); 

     _annotationDetailButton = UIButton.FromType(UIButtonType.DetailDisclosure); 
     _annotationDetailButton.TouchUpInside += (sender, e) => 
     { 
      //put create segue her 
      PerformSegue("ShowCollectionDetail", Self); 

     }; 

     annotationView.RightCalloutAccessoryView = _annotationDetailButton; 

     // Annotation icon may be specified like this, in case you want it. 
     // annotationView.LeftCalloutAccessoryView = new UIImageView(UIImage.FromBundle("example.png")); 
     return annotationView; 
    } 
+0

Вы посмотрели мой ответ? –

+0

Я сделал, я получаю информацию об аннотациях, но не тот, который в настоящее время выбран. Я добавил этот код к методу GetViewForAnnotation. SculptureTitle.Text = annotationView.Annotation.GetTitle(); Любые предложения о том, что я все еще делаю неправильно. Кажется, я получаю аннотации не на текущем дисплее. – user3020229

ответ

1

Вы можете создать свой собственный MKAnnotation следующим образом:

public class AnnotationModel : MKAnnotation 
{ 
    private string _title; 
    private string _subtitle; 

    public AnnotationModel(CLLocationCoordinate2D coordinate, string title, string subtitle = "") 
    { 
     this.Coords = coordinate; 
     _title = title; 
     _subtitle = subtitle; 
    } 

    public override string Title { get { return _title; } } 
    public override string Subtitle { get { return _subtitle; } } 
    public CLLocationCoordinate2D Coords; 
    public override CLLocationCoordinate2D Coordinate { get { return this.Coords; } } 
} 

Затем вы можете использовать эту аннотацию в методе GetViewForAnnotation(). Для получения дополнительной информации смотрите на этом link.

+0

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

+0

Эй, я понял! Выяснилось, что мне просто нужно было вызвать DidSelectAnnotationView на карте. Затем добавлено мое собственное событие, в котором я назвал map.selectedannotations, который вернул текущую выбранную аннотацию, после чего я обвинил информацию в специальном классе, который вы мне показали. – user3020229

+0

map.DidSelectAnnotationView + = (объект отправителя, MKAnnotationViewEventArgs е) => { \t \t \t \t annoList = map.SelectedAnnotations; \t \t \t \t Еогеасп (IMKAnnotation а из annoList) \t \t \t \t { \t \t \t \t \t SculptureTitle.Text = a.GetTitle(); \t \t \t \t} \t \t \t}; – user3020229

0
map.DidSelectAnnotationView += (object sender, MKAnnotationViewEventArgs e) => 

{ annoList = map.SelectedAnnotations; foreach (IMKAnnotation a in annoList) { СкульптураTitle.Text = a.GetTitle(); } };