5

ストーリーボード iOS プロジェクトでマップ アノテーションを作成するために、以下を使用しました。

    CLLocationCoordinate2D annotationCoord3;

        annotationCoord3.latitude = 34.233129;
        annotationCoord3.longitude = -118.998644;

        MKPointAnnotation *annotationPoint3 = [[MKPointAnnotation alloc] init];
        annotationPoint3.coordinate = annotationCoord3;
        annotationPoint3.title = @"Another Spot";
        annotationPoint3.subtitle = @"More than a Fluke";
        [_mapView addAnnotation:annotationPoint3];

それはうまく機能しますが、新しいView Controllerにsequeをプッシュして画像を表示できるように、開示ボタンを追加したいと思います。これは可能ですか?

事前にt​​hx、

--bd--

4

2 に答える 2

9

クラスを であると宣言しますMKMapViewDelegate。それから加えて

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {


    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"String"];
    if(!annotationView) {   
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"String"];
        annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    }

    annotationView.enabled = YES;
    annotationView.canShowCallout = YES;

    return annotationView;
}

次に、次を追加します。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    // Go to edit view
    ViewController *detailViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
   [self.navigationController pushViewController:detailViewController animated:YES];

}

... ViewController は、定義したものであれば何でもかまいません (私は nib-files を使用しています...)

于 2012-06-07T19:29:34.833 に答える
2

Axel の答えは正しいです (賛成票を投じただけです): を実装し、そのインスタンスをMKMapView のプロパティにMKMapViewDelegate割り当てる必要があります。MonoTouchDelegateを使用している場合、ポートは次のとおりです。

class MapDelegate : MKMapViewDelegate
{
    public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, NSObject annotation)
    {
        MKAnnotationView annotationView = mapView.DequeueReusableAnnotation ("String");
        if (annotationView == null) {
            annotationView = new MKAnnotationView(annotation, "String");
            annotationView.RightCalloutAccessoryView = new UIButton(UIButtonType.DetailDisclosure);
        }
        annotationView.Enabled = true;
        annotationView.CanShowCallout = true;
        return annotationView;
    }

    public override void CalloutAccessoryControlTapped (MKMapView mapView, MKAnnotationView view, UIControl control)
    {
        // Push new controller to root navigation controller.
    }
}
于 2012-11-29T00:05:28.917 に答える