MonoTouch MapKit - annotations - ajout d'un bouton à bulle

voix
7

Quelqu'un sait s'il y a de toute façon d'obtenir un bouton sur une annotation?

Je voudrais que l'emplacement au choix - donc vous pouvez dire .. sélectionner l'emplacement et obtenir tous les événements à cet endroit en cliquant sur le bouton.

Est-ce possible?

w: //

Créé 02/03/2010 à 18:19
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
13

Voici le code je pour mon annotation, il comprend un bouton sur le côté droit de la bulle. Vous pouvez définir une IBAction pour pousser une nouvelle vue sur la pile pour afficher ce que vous voulez

- (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;
}
Créé 02/03/2010 à 20:39
source utilisateur

voix
5

Je viens d' aider quelqu'un d' autre dans cet objectif c, mais je suis sûr que le concept est le même avec mono. Vous devez créer un objet MKAnnotationView personnalisé et passer outre la GetViewForAnnotation méthode (viewForAnnotation dans obj-c) de votre classe MKMapViewDelegate ... consultez l'autre question .

Lorsque vous créez votre commande MKAnnotationView objet est essentiellement un UIView fait pour les annotations de la carte ... vous pouvez simplement ajouter votre bouton et d'autres informations à la vue et il apparaîtra lorsque l'utilisateur touche l'annotation.

Voici un code approximatif pour la méthode déléguée:

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;
   }
}
Créé 02/03/2010 à 18:30
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more