Добавление индикатора раскрытия на контакты карты iOS 5 - PullRequest
2 голосов
/ 30 ноября 2011

Кажется, я не могу добавить кнопку раскрытия в свои аннотации карты.

Я также реализовал MKMapViewDelegate в моем контроллере вида.Чего мне не хватает?

- (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];

        mapPin.canShowCallout = YES;
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        mapPin.rightCalloutAccessoryView = infoButton;

    }
    return mapPin;
}

1 Ответ

3 голосов
/ 30 ноября 2011

Этот код должен работать, но проверьте следующее:

  • Установлено ли свойство 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;
}
...