3

情報ウィンドウが消えないようにしています。それを示すために私が使用した

[mapView_ setSelectedMarker:marker];

しかし、ユーザーがマップのどこかをタップすると、情報ウィンドウが消えます。で再設定しようとしましdidTapAtCoordinateたが、これはマーカーの選択を解除する前に呼び出されます。どうやってするの?

4

2 に答える 2

0

Key Value Observing は、この場合の設計パターンです。この答えは私にとってはうまくいきます。

- (void)viewDidLoad {
  [super viewDidLoad];
  self.shouldShowInfoView = NO;
  [self.mapView addObserver:self
            forKeyPath:@"selectedMarker"
               options:(NSKeyValueObservingOptionNew |
                        NSKeyValueObservingOptionOld)
               context:NULL];
}

- (void)needToShowInfoView {
  self.shouldShowInfoView = YES;
}

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

  if ([keyPath isEqual:@"selectedMarker"]) {
    if (self.shouldShowInfoView) {
      if ([[change objectForKey:NSKeyValueChangeNewKey] isKindOfClass:[NSNull class]]) {
        self.mapView.selectedMarker = [change objectForKey:NSKeyValueChangeOldKey];
      }
    }
  }
}
于 2015-02-17T19:37:39.867 に答える