好的,所以我有一个地图视图,上面有一堆注释。选择时某些注释需要在小表视图中显示扩展信息,我正在通过将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。
到目前为止,我还没有找到解决这个问题的方法。
任何想法??
答案 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];
}
}