8

表示している地図で DetailDisclosure をクリックしたときにビューを切り替えたいと思います。私の現在のコードは次のとおりです。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control
{
    DetailViewController *detailViewController = [[DetailViewController alloc] 
    initWithNibName:@"DetailViewController" bundle:nil];
    detailViewController.title = dictionary[@"placeLatitude"]
    [self.navigationController pushViewController:detailViewController animated:YES];
}

これでView Controllerにプッシュできますが、最初にマップの生成に使用されたJSON配列から詳細を強制的に取得する方法がわかりません。マップを生成するために、次のようなデータを取得しています。

 for (NSDictionary *dictionary in array)
 {
    // retrieve latitude and longitude from the dictionary entry

    location.latitude = [dictionary[@"placeLatitude"] doubleValue];
    location.longitude = [dictionary[@"placeLongitude"] doubleValue];

   //CAN I LOAD THE TITLE/ID OF THE LOCATION HERE?

私は少し目標から外れていることを知っています。たぶん、正しい方向へのキックだけが役立つかもしれません。ありがとうございました!

4

1 に答える 1

11

絵コンテを使用していて、現在のシーンから目的のシーンへのセグエがある場合は、 に応答するだけcalloutAccessoryControlTappedです。例えば:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    [self performSegueWithIdentifier:@"Details" sender:view];
}

view明らかに、異なる注釈タイプに対して呼び出したい異なるセグエがある場合は、それに関連付けられている注釈のタイプなどを確認できます。

prepareForSegueそしてもちろん、いつものように次のシーンに情報を渡したい場合。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Details"])
    {
        MKAnnotationView *annotationView = sender;
        [segue.destinationViewController setAnnotation:annotationView.annotation];
    }
}

ご覧のとおり、annotationオブジェクトを次のビューに渡します。JSON 構造に各注釈に関連付けられた追加のフィールドがある場合、簡単な解決策の 1 つは、追跡する各フィールドに関連付けられたカスタム ビューにプロパティを追加することです。注釈カスタム クラスの .h に移動し、必要なプロパティを追加するだけです。そして、(マップに追加する) カスタム アノテーションを作成するときに、これらのプロパティも設定するだけです。次に、この注釈を次のView Controllerに渡すと、必要なすべてのプロパティがそこで利用可能になります。


明らかに、NIB を使用している場合は、次のビュー コントローラーをインスタンス化し、必要なプロパティを設定し、それにプッシュするか、モーダルに表示するために、NIB に相当するものを実行するだけです。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    DetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil
                                                                                bundle:nil];
    controller.annotation = annotationView.annotation;
    [self.navigationController pushViewController:controller animated:YES]; // or use presentViewController if you're using modals
}
于 2013-02-11T04:51:53.607 に答える