didDeselectAnnotationView

didDeselectAnnotationView

我的一个视图中有一个MKMapView,上面有一些注释。还有一个隐藏的UITableView,每个单元格都提供每个注释的详细信息。当用户选择某个注释时,将出现tableView并选择特定的单元格。同样,当用户选择一个单元格时,将选择特定的注释。

我希望该视图具有以下行为:当选择了注释并用户点击地图时,tableView将消失,但是当用户选择另一个注释时,tableView将保持可见并更改所​​选索引。

问题出在didDeselectAnnotationView方法上。它在didSelectAnnotationView之前调用,因此在要检查的方法中时:

-  (void)mapView:(MKMapView *)mapview didSelectAnnotationView:(MKAnnotationView *)view
{
     if([mapView.selectedAnnotations count] == 0)
         [self hideTableView];
}


目前没有选定的注释,并且tableView总是被隐藏。

我的问题是didDeselectAnnotationView是否有办法在点击的地图和选择其他注释之间进行区分。

另外,是否有任何解释为什么在iPhone 3G(4.2.1)中didDeselectAnnotationView被称为AFTER didSelectAnnotationView?好像很奇怪!

先感谢您!

最佳答案

我的处理方式如下...

- (void)mapView:(MKMapView *)mapview didDeselectAnnotationView:(MKAnnotationView *)view {
  [self performSelector:@selector(hideMyTableView) withObject:nil afterDelay:0.1];
}

- (void)mapView:(MKMapView *)mapview didDeselectAnnotationView:(MKAnnotationView *)view {
  [NSObject cancelPreviousPerformRequestsWithTarget:self];
}


这会导致对hideMyTableView的调用排队0.1秒,如果didSelect方法触发它取消了此请求,并且您的代码可以执行所需的操作,如果didSelect未得到调用,则将调用hideMyTableView。您可能需要将0.1增加到0.5,但先尝试0.1。

10-08 07:27