0

是否可以在新的视图控制器上显示带有 Map 注释的更多详细信息的视图控制器,当它弹出时返回到 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;

然后创建一个观察者 catch,当用户单击屏幕上的注释时,它将调用该方法来呈现任何视图:

- (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];

}

在 viewWillAppear 中取消选择:

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

于 2010-04-11T01:02:57.600 回答
0

您还可以为您创建的每个注释使用标签。为我工作。

于 2010-06-06T02:51:24.440 回答