objective-c - MKMapView didDeselectAnnotationView 与 UITableView 交互

标签 objective-c ios xcode uitableview mkmapview

我的一个 View 中有一个 MKMapView,上面有一些注释。还有一个隐藏的 UITableView,每个单元格显示每个注释的详细信息。当用户选择某个注释时,将出现 tableView 并选择特定的单元格。此外,当用户选择单元格时,特定注释也会被选中。

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

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

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

目前没有选定的注释,并且 tableView 始终隐藏。

我的问题是didDeselectAnnotationView是否有办法区分点击的 map 和选择的另一个注释。

此外,有什么解释为什么在 iPhone 3G(4.2.1) 中 didDeselectAnnotationViewdidSelectAnnotationView 之后被调用?看起来很奇怪!

提前致谢!

最佳答案

我处理这个问题的方法如下......

- (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。

关于objective-c - MKMapView didDeselectAnnotationView 与 UITableView 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7846424/

相关文章:

iphone - 如何将 AdWhirl-banner 固定在 TabBar 上方?

objective-c - 无法在 AppController 中导入 firebase

objective-c - 什么时候使用@property?

ios - iTunes Connect - 无法为预发布应用邀请 "internal testers"

ios - UICollectionView 上的 UIRefreshControl 高度非常低

ios - 在 Xcode 上归档时按顺序使用 max() 和 min() 的 Swift 问题

ios - Objective-C:在子类中使用继承和调用方法

ios - 如何在 Core Spotlight 中正确地批处理索引

ios - 如何防止触摸通过 UIImageView?

xcode - UIAlertController 无法显示 UIAlertView