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;
Что я делаю неправильно/отсутствует?
Спасибо.
Ответы
Ответ 1
Выноска не отображается, поскольку title
- nil
.
Нет необходимости реализовывать viewForAnnotation
, чтобы отображать выноски, поскольку в представлении отображения по умолчанию отображаются выноски. (Однако, если вы его реализуете, вы должны установить canShowCallout
в этом методе делегата, а не там, где вы сейчас это делаете.)
Даже если вы установили canShowCallout
в YES
, выноска пока не будет отображаться, если title
- nil
или пустое.
Войдите в словарь tmp
. Либо ключ name
пуст или он не существует.
Ответ 2
Вам нужно реализовать метод MKMapViewDelegate mapView:viewForAnnotation:
, который создает представление и возвращает его. В этом методе вызовите [view setCanShowCallout:YES];
в представлении, которое вы планируете возвратить для аннотации.
Поскольку символ mapView:didSelectAnnotationView:
вызывается ПОСЛЕ того, как выбран штифт, он не будет влиять на включение/выключение выноски.