2011-10-28 11 views
12

Zastanawiałem się, czy ktoś mógłby mi powiedzieć, jak dodać odpowiednie akcesorium objaśnienia do adnotacji mapy. wszystko, co próbuję, nigdzie nie dociera, więc każda pomoc będzie doceniona.Metoda i implementacja Right Callout Akcesorium

EDIT

Próbowałem tego wiersza kodu, ale nic nie różni się dzieje z adnotacją.

- (MKAnnotationView *)mapview:(MKMapView *)sender viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
MKAnnotationView *aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@""]; 
aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
aView.canShowCallout = YES; 
aView.annotation = annotation; 
return aView; 
} 
+0

można pokazać to, co sprawdzone i dokładnie, jakie błędy lub problemy masz? – Anna

Odpowiedz

34

Nazwa metody jest nieprawidłowa. Powinno być mapView z kapitałem V:

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

Objective-C jest wielkość liter.

Jeśli metoda nadal nie zostanie wywołana, to innym problemem jest brak ustawienia widoku mapy delegate. W kodzie ustaw go na self lub w Konstruktorze interfejsu dołącz delegata do właściciela pliku.

Upewnij się też, że ustawiłeś title adnotacji przed dodaniem, w przeciwnym razie objaśnienie nadal nie będzie wyświetlane.

Powyższe zmiany powinny naprawić przycisk akcesoriów, który nie pojawia się.


Kilka innych niepowiązanych sugestie ...

W viewForAnnotation należy wspierać widok adnotacji ponownego wykorzystania dzwoniąc dequeueReusableAnnotationViewWithIdentifier:

- (MKAnnotationView *)mapView:(MKMapView *)sender viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    static NSString *reuseId = @"StandardPin"; 

    MKPinAnnotationView *aView = (MKPinAnnotationView *)[sender 
       dequeueReusableAnnotationViewWithIdentifier:reuseId]; 
    if (aView == nil) 
    { 
     aView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation 
        reuseIdentifier:reuseId] autorelease]; 
     aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     aView.canShowCallout = YES; 
    } 

    aView.annotation = annotation; 

    return aView; 
} 

Jeśli projekt korzysta z ARC, usuń autorelease.


Nawiasem mówiąc, w odpowiedzi na dodatkowym naciśnięciu przycisku, wdrożyć metodę calloutAccessoryControlTapped Delegat:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
     calloutAccessoryControlTapped:(UIControl *)control 
{ 
    NSLog(@"accessory button tapped for annotation %@", view.annotation); 
} 
Powiązane problemy