mapView:didDeselectAnnotationView:在实际取消选择注释视图之前调用委托方法

Eli*_*Eli 2 annotations mkmapview mkannotationview ios mkmapviewdelegate

我正在使用填充了自定义引脚的地图视图.当用户点击地图上的某个地方取消选择一个引脚时,我想实现地图,这样引脚就不会被取消选择(即用户无法在不选择其他引脚的情况下取消选择引脚,因此至少会选择一个引脚).这是我对didDeselectAnnotationView方法的实现:

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
    [mapView selectAnnotation:view.annotation animated:NO];
}
Run Code Online (Sandbox Code Playgroud)

基本上,我正在尝试重新选择注释.但是,经过一些调试和打印到控制台后,我意识到注释视图实际上并没有被取消选择,直到方法didDeselectAnnotationView:完成运行(即事件的顺序为:用户点击地图上的某个地方,didDeselectAnnotationView:被调用并完成执行,实际取消选择注释视图).有没有其他人遇到过这个问题,或者是否有人知道另一种强制执行地图行为的方法,这样用户无法在不选择其他引脚的情况下取消选择引脚,以便始终选择一个引脚?

谢谢您的帮助.

小智 10

尝试推迟重新选择,直到didDeselectAnnotationView完成后:

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
    [self performSelector:@selector(reSelectAnnotationIfNoneSelected:) 
            withObject:view.annotation afterDelay:0];
}

- (void)reSelectAnnotationIfNoneSelected:(id<MKAnnotation>)annotation
{
    if (mapView.selectedAnnotations.count == 0)
        [mapView selectAnnotation:annotation animated:NO];
}
Run Code Online (Sandbox Code Playgroud)