点击地图视图时未调用 didDeselectAnnotationView
didDeselectAnnotationView not called when tap on map view
我构建了一个地图视图控制器并且一切正常。在地图上选择注释视图时,屏幕上会显示自定义视图以显示有关该注释的一些信息。点击地图将取消选择注释视图并隐藏自定义视图。
我现在有一个要求,如果视图上只有一个注释,则在推入地图视图控制器时显示自定义视图。所以我简单地实现了
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
地图视图完成加载时。
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
if (self.viewModel.pointsArray.count == 1) {
GSMapsLocationPoint* point = self.viewModel.pointsArray.lastObject;
MKAnnotationView *annotationView = [self.mapsView viewForAnnotation:point];
[self mapView:self.mapsView didSelectAnnotationView:annotationView];
}
}
但是,当我点击地图时,- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
不会被调用。如果我手动点击该注释视图,那么 didSelectAnnotationView
将被正确调用。
似乎在代码中调用 didSelectAnnotationView
不会更改某些状态,因此地图视图不知道有一个注释视图被选中。
我该如何解决这个问题?提前致谢。
您应该使用 selectAnnotation:
而不是 didSelectAnnotationView:
,请尝试替换为:
[self mapView:self.mapsView didSelectAnnotationView:annotationView];
有了这个:
[self.mapsView selectAnnotation:point animated:YES];
didSelectAnnotationView:
将在选择注释时由您的 mapView 调用。
我构建了一个地图视图控制器并且一切正常。在地图上选择注释视图时,屏幕上会显示自定义视图以显示有关该注释的一些信息。点击地图将取消选择注释视图并隐藏自定义视图。
我现在有一个要求,如果视图上只有一个注释,则在推入地图视图控制器时显示自定义视图。所以我简单地实现了
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
地图视图完成加载时。
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
if (self.viewModel.pointsArray.count == 1) {
GSMapsLocationPoint* point = self.viewModel.pointsArray.lastObject;
MKAnnotationView *annotationView = [self.mapsView viewForAnnotation:point];
[self mapView:self.mapsView didSelectAnnotationView:annotationView];
}
}
但是,当我点击地图时,- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
不会被调用。如果我手动点击该注释视图,那么 didSelectAnnotationView
将被正确调用。
似乎在代码中调用 didSelectAnnotationView
不会更改某些状态,因此地图视图不知道有一个注释视图被选中。
我该如何解决这个问题?提前致谢。
您应该使用 selectAnnotation:
而不是 didSelectAnnotationView:
,请尝试替换为:
[self mapView:self.mapsView didSelectAnnotationView:annotationView];
有了这个:
[self.mapsView selectAnnotation:point animated:YES];
didSelectAnnotationView:
将在选择注释时由您的 mapView 调用。