MkMapView标注选择困境?

3
好的,我有一个地图视图,上面有一堆注释。当选中某些标注时,需要在一个小表视图中显示扩展信息,我通过将地图视图调整为半屏幕大小,并在底部半屏幕中动画化地显示表视图来实现这一点。如果选中另一个不需要额外信息的注释,则在didDeselectAnnotationView:方法中隐藏表格并返回完整的地图视图,反复进行...到目前为止,一切都很好,一切正常工作。

但问题是,如果用户在已经选择一个注释的情况下选择了另一个注释,则会先调用didSelectAnnotationView代理方法然后才是didDeselectAnnotationView。

这显然是一个问题,因为我正在使用这两种方法来决定是否需要显示/隐藏地图视图下面的信息表。代码如下:

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

所以例如,如果我选择一个需要地图表的注释,并且我当前选择了常规注释,则在调用上面的didSelectAnnotationView方法时加载mapTable,然而它立即被隐藏,因为紧接着就会调用didDeselectAnnotationView。
到目前为止,我还没有找到解决这个问题的方法。
有什么想法吗?
1个回答

1

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

类似于:

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

谢谢回答。虽然最终并没有解决我的问题,但无意中让我找对了方向。 - James
FYI,didDeselectAnnotationView仅在iOS 4中引入:http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html - Dan J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接