iOS — установка кнопки раскрытия сведений в MKAnnotationView

У меня есть следующий метод в моем 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;
} 

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

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


person 8vius    schedule 21.02.2012    source источник


Ответы (1)


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

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

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

mapView.delegate = self;

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

person Community    schedule 21.02.2012