Подтвердить что ты не робот

MKnnotation не показывает выноски на MKMapView

У меня есть MKMapView, и я добавляю такие аннотации:

for (NSDictionary *tmp in response)
{
    NSDictionary *places = [tmp objectForKey:@"place"];
    NSDictionary *location = [places objectForKey:@"location"];
    NSLog(@"long: %@ Lat:%@",[location objectForKey:@"longitude"], [location objectForKey:@"latitude"]);

    float longitude = [[location objectForKey:@"longitude"] floatValue];
    float latitude = [[location objectForKey:@"latitude"] floatValue];


    CLLocationCoordinate2D locationco = {latitude,longitude};
    NSString *titleString = [tmp objectForKey:@"name"];

    Place *pin = [[Place alloc] init];
    pin.coordinate = locationco;
    pin.title = titleString;
    pin.subtitle = @"A Location";

    //NSArray *annots = [[NSArray alloc] initWithObjects:pin, nil];
    //[map addAnnotations:annots];
    [map addAnnotation:pin];
    [[map viewForAnnotation:pin] setCanShowCallout:YES];
}

Значок MKAnnotation отображается на карте отлично, и я могу выбрать их, однако не появляется пузырь вызова. Я знаю, что они правильно выбираются из этого

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    [view setCanShowCallout:YES];
    NSLog(@"Title:%@",[view.annotation description]);
}

Но это просто печатает

Title:(null)

Я использую ARC, и у меня есть свойства, установленные в моем объекте Place как таковые:

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic,readwrite, copy) NSString *title;
@property (nonatomic,readwrite, copy) NSString *subtitle;

Что я делаю неправильно/отсутствует? Спасибо.

4b9b3361

Ответ 1

Выноска не отображается, поскольку title - nil.

Нет необходимости реализовывать viewForAnnotation, чтобы отображать выноски, поскольку в представлении отображения по умолчанию отображаются выноски. (Однако, если вы его реализуете, вы должны установить canShowCallout в этом методе делегата, а не там, где вы сейчас это делаете.)

Даже если вы установили canShowCallout в YES, выноска пока не будет отображаться, если title - nil или пустое.

Войдите в словарь tmp. Либо ключ name пуст или он не существует.

Ответ 2

Вам нужно реализовать метод MKMapViewDelegate mapView:viewForAnnotation:, который создает представление и возвращает его. В этом методе вызовите [view setCanShowCallout:YES]; в представлении, которое вы планируете возвратить для аннотации.

Поскольку символ mapView:didSelectAnnotationView: вызывается ПОСЛЕ того, как выбран штифт, он не будет влиять на включение/выключение выноски.