情報ウィンドウが消えないようにしています。それを示すために私が使用した
[mapView_ setSelectedMarker:marker];
しかし、ユーザーがマップのどこかをタップすると、情報ウィンドウが消えます。で再設定しようとしましdidTapAtCoordinate
たが、これはマーカーの選択を解除する前に呼び出されます。どうやってするの?
情報ウィンドウが消えないようにしています。それを示すために私が使用した
[mapView_ setSelectedMarker:marker];
しかし、ユーザーがマップのどこかをタップすると、情報ウィンドウが消えます。で再設定しようとしましdidTapAtCoordinate
たが、これはマーカーの選択を解除する前に呼び出されます。どうやってするの?
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];
}
}
}
}