rightCalloutAccessoryView未显示在MKPinAnnotationView上

时间:2013-05-26 16:56:46

标签: iphone ios cocoa-touch cocoa mkmapview

我在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;字幕可以显示。

提前致谢。

1 个答案:

答案 0 :(得分:7)

查看标题和副标题是注释视图的默认行为。如果您要执行其他任何操作(例如rightCalloutAccessorView),则必须通过设置viewForAnnotation的{​​{1}}来确保调用delegate,并确保您的MKMapView正在返回您正在创建的viewForAnnotation

正在发生两个问题之一:

  1. 您的annotationView在所有情况下都会返回viewForAnnotation。确保在创建/修改后返回nil

  2. 如果您的地图视图annotationView尚未设置,则根本不会调用您当前的delegate

    确保您已设置viewForAnnotation。您可以通过编程方式执行此操作:

    delegate

    或者您可以在IB中执行此操作(通过选择连接检查器,右侧面板的最右侧选项卡和 control -drag从self.mapView.delegate = self; 到场景的状态栏) :

    enter image description here

    如果是这种情况,请在delegate中添加NSLog语句或断点。如果viewForAnnotation未正确设置,您可能根本看不到它被调用。