0

新しいView ControllerにMap注釈の詳細を含むView Controllerを表示することは可能ですか。ポップすると、その位置に注釈が残っているMKMapビューに戻ります。SDKのドキュメントで、その可能性を示しているように見える方法を見つけることができないようです。

4

2 に答える 2

2

次のことを行うと、私自身の質問に対する答えが見つかりました。

できることは、代わりにオブザーバーを使用することです。

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

次のようなコードを追加できるメソッド:

 //Add an observer for the selected-property on the MKAnnotationView. Delegate to self.
  [annotationView addObserver:self
            forKeyPath:@"selected"
               options:NSKeyValueObservingOptionNew
               context:GMAP_ANNOTATION_SELECTED];

  annotationView.annotation = annotation;
  annotationView.canShowCallout = NO;

次に、ユーザーが画面上の注釈をクリックしたときにビューをレンダリングするメソッドを呼び出すオブザーバー キャッチを作成します。

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context{

  NSString *action = (NSString*)context;


  if([action isEqualToString:GMAP_ANNOTATION_SELECTED]){
    BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
    if (annotationAppeared) {
      [self showAnnotation:((AssetAnnotationView*) object).annotation];
    }
    else {
      //NSLog(@"annotation deselected %@", ((AssetAnnotationView*) object).annotation.title);
      //[self hideAnnotation];
    }
  }
}

次に、モーダルビューまたは必要なものを表示するメソッドを用意します。

- (void)showAnnotation:(AssetAnnotationView*)annotation {

  UINavigationController *aNavController = [[UINavigationController alloc] initWithRootViewController:self.assetInfoViewController];
    aNavController.navigationBar.barStyle = UIBarStyleBlack;

  [self presentModalViewController:aNavController animated:YES];
  [aNavController release];

}

ビューで選択解除しますWillAppear:

NSArray *selected = [localMapView selectedAnnotations]; for(id annotation in selected) { [localMapView deselectAnnotation:annotation animation:NO]; }

于 2010-04-11T01:02:57.600 に答える
0

作成するすべての注釈にタグを使用することもできます。私のために働きます。

于 2010-06-06T02:51:24.440 に答える