iOS - установить кнопку раскрытия подробностей на MKAnnotationView - PullRequest
5 голосов
/ 21 февраля 2012

В моем MapViewController есть следующий метод:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MapVC"];
    if (!annotationView) {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MapVC"];
        annotationView.canShowCallout = YES;
        annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
        annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        // could put a rightCalloutAccessoryView here
    } else {
        annotationView.annotation = annotation;
        [(UIImageView *)annotationView.leftCalloutAccessoryView setImage:nil];
    }

    return annotationView;
} 

Я считаю, что он настроен правильно, но когда моя карта показывает мои аннотации с заголовком и субтитрами должным образом, но они не показывают кнопку раскрытия подробностей, я что-то упустил?

Другое дело, что при отладке этот метод никогда не вызывается, но в аннотации отображается заголовок и подзаголовок.

1 Ответ

8 голосов
/ 21 февраля 2012

Скорее всего, delegate представления карты не задано.

Если delegate не задано или если вы не реализуете метод viewForAnnotation, представление карты создаст аннотацию по умолчанию.представление, представляющее собой красный штифт с выноской, содержащей только заголовок и подзаголовок (если заголовок не пуст, в этом случае вы получите пин-код, но не выноску).

Либо подключите выход delegate представления карты кВладелец файла или код добавьте его (например, в viewDidLoad до добавления аннотации):

mapView.delegate = self;

Кроме того, если вы не используете ARC, добавьте autorelease к строкам allocчтобы избежать утечки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...