Monotouch MapKit - аннотации - добавление кнопки в пузырек

Кто-нибудь знает, есть ли вообще кнопка для аннотации?

Я бы хотел, чтобы это место можно было выбрать - чтобы вы могли сказать ... выберите место и получите все события в этом месте, нажав на кнопку.

Это возможно?

w://


person Community    schedule 02.03.2010    source источник


Ответы (2)


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

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinAnnotation = nil;
    if(annotation != mapView.userLocation) 
    {
        static NSString *defaultPinID = @"myPin";
        pinAnnotation = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinAnnotation == nil )
            pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];

        pinAnnotation.canShowCallout = YES;

        //instatiate a detail-disclosure button and set it to appear on right side of annotation
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinAnnotation.rightCalloutAccessoryView = infoButton;

    }

    return pinAnnotation;
}
person conorgriffin    schedule 02.03.2010
comment
В дополнение к этому вы захотите реализовать метод делегата - mapView: annotationView: calloutAccessoryControlTapped: для обработки нажатий на кнопку раскрытия информации, которая есть в выноске аннотации. - person Brad Larson; 03.03.2010
comment
Почему вы выпускаете defaultPinID? Вам не нужно его выпускать. Выпуск pinAnnotation в конце концов зря, потому что он никогда не вызывается. - person testing; 05.10.2010
comment
просто любопытно - это помечено как монотач, так почему бы не использовать пример C #? - person Jack Marchetti; 29.10.2011

Я просто помог кому-то еще с этим в цели c, но я уверен, что концепция такая же и с моно. Вам необходимо создать собственный объект MKAnnotationView и переопределить метод GetViewForAnnotation (viewForAnnotation in obj-c) вашего класса MKMapViewDelegate ... ответьте на другой вопрос.

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

Вот примерный код метода делегата:

public override MKAnnotationView GetViewForAnnotation(
                                         MKMapView mapView,NSObject annotation) {
      var annotationId = "location";
      var annotationView = mapView.DequeueReusableAnnotation(annotationId);
      if (annotationView == null) {
         // create new annotation
         annotationView = new CustomAnnotationView(annotation, annotationId);
      }
      else {
         annotationView.annotation = annotation;
      }
      annotation.CanShowCallout = true;
      // setup other info for view
      // ..........

      return annotationView;
   }
}
person Ryan Ferretti    schedule 02.03.2010