Этот код должен работать, но проверьте следующее:
- Установлено ли свойство
delegate
вида карты?Объявление о том, что контроллер представления реализует протокол MKMapViewDelegate
, фактически не сообщает представлению карты, какой объект реализует методы делегата.В коде map.delegate = self;
или в IB подключите выход delegate
к владельцу файла. - Не установлено ли свойство аннотации
title
не пустым?Если title
пусто, выноска не будет отображаться.
Также не связано, но, когда очередь возвращает представление аннотации, вы должны обновить ее свойство annotation
до текущей аннотации (это может привести кранее использовались для другой аннотации).Кроме того, если вы не используете ARC, вам также следует autorelease
представление.
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *mapPin = nil;
if(annotation != map.userLocation)
{
static NSString *defaultPinID = @"defaultPin";
mapPin = (MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (mapPin == nil )
{
mapPin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:defaultPinID] autorelease];
mapPin.canShowCallout = YES;
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
mapPin.rightCalloutAccessoryView = infoButton;
}
else
mapPin.annotation = annotation;
}
return mapPin;
}