MKAnnotation не показывает выноску на 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;

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

2 ответа

Решение

Выноска не отображается, потому что title является nil,

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

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

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

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

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

Другие вопросы по тегам