2012-06-07 36 views
5

Per creare una mappa di annotazione in un progetto storyboard iOS, ho usato:pulsante Aggiungi Divulgazione a MKPointAnnotation

CLLocationCoordinate2D annotationCoord3; 

     annotationCoord3.latitude = 34.233129; 
     annotationCoord3.longitude = -118.998644; 

     MKPointAnnotation *annotationPoint3 = [[MKPointAnnotation alloc] init]; 
     annotationPoint3.coordinate = annotationCoord3; 
     annotationPoint3.title = @"Another Spot"; 
     annotationPoint3.subtitle = @"More than a Fluke"; 
     [_mapView addAnnotation:annotationPoint3]; 

Funziona benissimo, ma vorrei aggiungere un pulsante di rilevazione in modo da poter spingere seque ad una nuova guarda il controller e visualizza l'immagine. È possibile?

Thx in anticipo,

--bd--

+0

si aggiunge roba da viste di annotazione non per le annotazioni;) –

risposta

9

dichiarare la classe di essere un MKMapViewDelegate. Quindi, aggiungere

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 


    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"String"]; 
    if(!annotationView) { 
     annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"String"]; 
     annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    } 

    annotationView.enabled = YES; 
    annotationView.canShowCallout = YES; 

    return annotationView; 
} 

Poi si aggiungono:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 
    // Go to edit view 
    ViewController *detailViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    [self.navigationController pushViewController:detailViewController animated:YES]; 

} 

... ViewController può essere qualsiasi cosa si è definito (io uso pennini files ...)

+0

funziona solo quando si aggiunge '[MapView setDelegate: self];' da qualche parte nel 'viewDidLoad (); o così :) – doonot

+0

Sì. In oredr per usare i metodi dei delegati mapview devi conformare mkmapviewdelegate prima in .h e impostare viewcontroller come delegato di mapview ... Spero di esserti utile –

2

risposta di Axel è corretta (I appena upvoted): è necessario implementare il MKMapViewDelegate e assegnare un'istanza di esso alla proprietà Delegate di MKMapView. Per coloro che utilizzano MonoTouch, ecco la porta:

class MapDelegate : MKMapViewDelegate 
{ 
    public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, NSObject annotation) 
    { 
     MKAnnotationView annotationView = mapView.DequeueReusableAnnotation ("String"); 
     if (annotationView == null) { 
      annotationView = new MKAnnotationView(annotation, "String"); 
      annotationView.RightCalloutAccessoryView = new UIButton(UIButtonType.DetailDisclosure); 
     } 
     annotationView.Enabled = true; 
     annotationView.CanShowCallout = true; 
     return annotationView; 
    } 

    public override void CalloutAccessoryControlTapped (MKMapView mapView, MKAnnotationView view, UIControl control) 
    { 
     // Push new controller to root navigation controller. 
    } 
} 
Problemi correlati