我有一个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;
我做错了什么/失踪了? 感谢。
答案 0 :(得分:41)
标注未显示,因为title
为nil
。
由于默认地图视图实现显示了标注,因此没有必要实现viewForAnnotation
来显示标注。 (但是,如果你做实现它,你必须在该委托方法中设置canShowCallout
而不是你现在在哪里设置它。)
即使您将canShowCallout
设置为YES
,如果title
为nil
或空白,标注仍然不会显示。
记录tmp
字典。 name
密钥为空或不存在。
答案 1 :(得分:9)
您需要实现MKMapViewDelegate方法mapView:viewForAnnotation:
,它创建视图并返回它。在该方法中,在您计划为注释返回的视图上调用[view setCanShowCallout:YES];
。
因为在选择了引脚后调用了mapView:didSelectAnnotationView:
,所以它对启用/禁用标注没有任何影响。