我在MKMapView上使用MKPinAnnotationView,标题和副标题正常显示,但rightCalloutAccessoryView
未显示。
我尝试了很多谷歌,但还没有显示出来。我的代码如下。
- (void)addAnnotation
{
CLLocationCoordinate2D theCoordinate = self.location.coordinate;
MapAnnotation *annotation = [[MapAnnotation alloc] initWithCoordinate:theCoordinate];
annotation.title = @"Pin";
annotation.subtitle = @"More information";
[self.mapView addAnnotation:annotation];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MapAnnotation class]]) {
static NSString *reuseIdentifier = @"MyMKPinAnnotationView";
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseIdentifier];
if (!annotationView) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
annotationView.pinColor = MKPinAnnotationColorRed;
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
} else {
annotationView.annotation = annotation;
}
}
return nil;
}
注意标题&amp;字幕可以显示。
提前致谢。
答案 0 :(得分:7)
查看标题和副标题是注释视图的默认行为。如果您要执行其他任何操作(例如rightCalloutAccessorView
),则必须通过设置viewForAnnotation
的{{1}}来确保调用delegate
,并确保您的MKMapView
正在返回您正在创建的viewForAnnotation
。
正在发生两个问题之一:
您的annotationView
在所有情况下都会返回viewForAnnotation
。确保在创建/修改后返回nil
。
如果您的地图视图annotationView
尚未设置,则根本不会调用您当前的delegate
。
确保您已设置viewForAnnotation
。您可以通过编程方式执行此操作:
delegate
或者您可以在IB中执行此操作(通过选择连接检查器,右侧面板的最右侧选项卡和 control -drag从self.mapView.delegate = self;
到场景的状态栏) :
如果是这种情况,请在delegate
中添加NSLog
语句或断点。如果viewForAnnotation
未正确设置,您可能根本看不到它被调用。