MkMapView注解选择困境?

发布于 2024-11-27 03:07:10 字数 1411 浏览 0 评论 0原文

好的,我有一个地图视图,上面有很多注释。选择某些注释时需要在小表格视图中显示扩展信息,我正在通过将地图视图大小调整为半屏并以动画方式查看下半部分的表格来完成此操作。如果选择了另一个不需要额外信息的注释,那么在 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。

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

有什么想法吗?

Ok, so I have a map view that has a bunch of annotations on it. Certain annotations when selected need to display extended info in a small table view which i am doing by resizing the mapview to half screen and animating into view a table in the bottom half. If another annotation is selected that doesn't need the extra info then in the didDeselectAnnotationView: method i hide the table and go back to the full map view, rinse and repeat.. So far so good, everything is working great.

The issue i am having though is that if a user selects another annotation while they currently have an annotation selected then didSelectAnnotationView delegate method gets called BEFORE the didDeselectAnnotationView.

This is obviously a problem because i am using these two methods to decide whether or not i need to display/hide the info table below the mapview, see code below:

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

So for example if i select an annotation that needs the maptable and i currently have a regular annotation selected then the mapTable is loaded when the didSelectAnnotationView method above is called, however it is immediately hidden again because the didDeselectAnnotationView is called right after.

So far i havent been able to figure out a way to fix this.

Any ideas??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清秋悲枫 2024-12-04 03:07:10

您可以检查 didDeselectAnnotationView 中没有可见注释的情况,然后仅在这种情况下清理表格视图。由于所有其他情况将由 didSelectAnnotation 视图处理。

像这样的东西:

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

You could check for the case where no annotations are visible in didDeselectAnnotationView and then clean up your tableview on this case only. As all other cases will be handled by didSelectAnnotation view.

Something like:

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view{
  if([[mapView selectedAnnotations] count]==0){
    mapTableViewIsVisible = NO;
    [self loadMapTableViewWithEvents:nil forAnnotation:(MapLocation*)view.annotation];
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文