iPad MapKit - 重新选择一个引脚不起作用

时间:2011-04-30 21:51:05

标签: objective-c touch mapkit

我有以下问题:

我的地图上有很多针脚。触摸一个后,将打开一个自定义弹出窗口并显示信息。这很完美。

我的问题是,如果您选择两次相同的图钉,则弹出窗口不会打开,您必须触摸另一个图钉或点击地图中的某个位置。

我的代码如下:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
    MKAnnotationView* annotationView = nil;
    CPPointOfInterest *myAnnotation = (CPPointOfInterest*) annotation;

    if ([myAnnotation isKindOfClass:[MKUserLocation class]] || myAnnotation.poi_id <= 0) {
        return nil;

    } else {
        NSString* identifier = @"Pin";
        MKPinAnnotationView* annView = (MKPinAnnotationView*)[mv_map dequeueReusableAnnotationViewWithIdentifier:identifier];

        if(nil == annView) {
            annView = [[[MKPinAnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:identifier] autorelease];
        }

        [annView addObserver:self
                  forKeyPath:@"selected"
                     options:NSKeyValueObservingOptionNew
                 context:@"GMAP_ANNOTATION_SELECTED"];

        if(self.nearest_poi == myAnnotation) {
            annView.pinColor = MKPinAnnotationColorGreen;

        } else {
            annView.pinColor = MKPinAnnotationColorRed;

        }

        annView.animatesDrop = YES;

        annotationView = annView;

        [annotationView setEnabled:YES];
        [annotationView setCanShowCallout:NO];

        return annotationView;

    }
}

观察:

- (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) {
            // show popup
            } 
    }
}

我也尝试了didSelectAnnotationView方法,这也适用于第一次点击事件。

我搜索了几个小时,但没有找到......:/

有没有人知道我的问题的解决方案,请给我一个提示......

谢谢和问候, 马修

2 个答案:

答案 0 :(得分:3)

您必须先通过mapView取消选择注释,然后才能再次选择它。尝试下面的内容:

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{

[mapView deselectAnnotation:view.annotation animated:NO];

}

答案 1 :(得分:1)

我正在使用弹出框来显示信息:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    if (popover)
    {
        [popover release];
        popover = nil;
    }

    LocatorSearchDealer *dealer = [[mapView selectedAnnotations] objectAtIndex:0];

    //without this line I cannot immediately reselect the same annotation.
    [mapView deselectAnnotation:dealer animated:NO];
}