我的一个 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) 中 didDeselectAnnotationView
在 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。
关于objective-c - MKMapView didDeselectAnnotationView 与 UITableView 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7846424/