4

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;
}

タイトルとサブタイトルを表示できることに注意してください。

前もって感謝します。

4

1 に答える 1

7

タイトルとサブタイトルの表示は、注釈ビューのデフォルトの動作です。rightCalloutAccessorView他のこと ( など)を実行したい場合は、の をviewForAnnotation設定して が呼び出されていることを確認し、作成中の が返されていることを確認する必要があります。delegateMKMapViewviewForAnnotationannotationView

次の 2 つの問題のいずれかが発生しています。

  1. あなたはすべての場合viewForAnnotationに戻ってきます。作成/変更した後は、nil必ず戻ってください。annotationView

  2. マップ ビューdelegateが設定されていない場合、現在のビューはviewForAnnotationまったく呼び出されません。

    が設定されていることを確認してくださいdelegate。これはプログラムで行うことができます。

    self.mapView.delegate = self;
    

    または、IB でこれを行うこともできます (接続インスペクタ、右側のパネルの右端のタブを選択し、からシーンのステータス バーにドラッグします) control:delegate

    ここに画像の説明を入力

    この場合、NSLogステートメントまたはブレークポイントをviewForAnnotation. delegateが適切に設定されていない場合は、まったく呼び出されていない可能性があります。

于 2013-05-26T17:00:51.580 に答える