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);
}
można pokazać to, co sprawdzone i dokładnie, jakie błędy lub problemy masz? – Anna