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:
называется ПОСЛЕ того, как выбран пин-код, это не повлияет на включение / отключение выноски.