Имя метода неверно.Это должно быть mapView
с большой буквы V
:
- (MKAnnotationView *)mapView:(MKMapView *)sender
viewForAnnotation:(id <MKAnnotation>)annotation
Objective-C чувствителен к регистру.
Если метод все еще не вызывается, то другая проблемаявляется то, что вид карты delegate
не установлен.В коде установите его на self
или в Интерфейсном Разработчике присоедините делегата к Владельцу файла.
Также убедитесь, что вы установили title
аннотации, прежде чем добавить ее, в противном случае выноска все равно не будет отображаться.
Приведенные выше изменения должны исправить появление дополнительной кнопки.
Некоторые другие несвязанные предложения ...
В viewForAnnotation
следует поддерживать просмотр аннотаций повторно.-использование по телефону 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;
}
Если ваш проект использует ARC, удалите autorelease
.
Кстати, чтобы ответить на нажатие вспомогательной кнопки, нажмите,реализовать метод делегата calloutAccessoryControlTapped
:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(@"accessory button tapped for annotation %@", view.annotation);
}