MkMapView注释选择困境?

时间:2011-07-31 19:06:12

标签: ios mkmapview mkannotation

好的,所以我有一个地图视图,上面有一堆注释。选择时某些注释需要在小表视图中显示扩展信息,我正在通过将mapview的大小调整为半屏并动画查看下半部分中的表来实现。如果选择另一个不需要额外信息的注释,那么在didDeselectAnnotationView:方法中我隐藏表并返回到完整的地图视图,冲洗并重复..到目前为止,一切都很好。一切都很好。

我遇到的问题是,如果用户在当前选择了注释时选择了另一个注释,则didSelectAnnotationView委托方法将被称为 BEFORE didDeselectAnnotationView。

这显然是一个问题,因为我使用这两种方法来决定是否需要在mapview下面显示/隐藏信息表,请参阅下面的代码:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([view.annotation isKindOfClass:[MapLocation class]]) 
{        
    if ([self.selectedAnnotation numberOfEvents] == 1) 
    {
        mapTableViewIsVisible = NO;
    }
    else if ([self.selectedAnnotation numberOfEvents] > 1)
    {            
        // launch mini tableview
        mapTableViewIsVisible = YES;
    }        

    [self loadMapTableViewWithEvents:self.selectedAnnotation.events 
                       forAnnotation:self.selectedAnnotation];
}
}

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

if ([view.annotation isKindOfClass:[MapLocation class]]) 
{    
    mapTableViewIsVisible = NO;
    [self loadMapTableViewWithEvents:nil forAnnotation:(MapLocation*)view.annotation];
}
}

因此,例如,如果我选择需要maptable 的注释,我当前选择了常规注释,那么当调用上面的didSelectAnnotationView方法时,会加载mapTable,但是它会立即再次隐藏,因为之后会调用didDeselectAnnotationView。

到目前为止,我还没有找到解决这个问题的方法。

任何想法??

1 个答案:

答案 0 :(得分:1)

您可以检查didDeselectAnnotationView中没有注释的情况,然后仅在此案例中清理您的tableview。因为所有其他情况都将由didSelectAnnotation视图处理。

类似的东西:

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view{
  if([[mapView selectedAnnotations] count]==0){
    mapTableViewIsVisible = NO;
    [self loadMapTableViewWithEvents:nil forAnnotation:(MapLocation*)view.annotation];
  }
}