禁用MKAnnotationView上的触摸

时间:2012-09-12 11:56:07

标签: iphone ios uiview mkmapview mapkit

在地图上单击MKAnnotationViews时,它们会暂时显示在前面。我不想要这种行为,我有很多MKAnnotationViews,它们只是地图上没有任何其他功能的图标。

我已尝试将MKAnnotationView userInteractionEnabled设置为NO但不起作用。触摸时MKAnnotationView仍然在前面。这是令人困惑的,因为MKAnnotationView只是一个UIView所以我无法解决为什么userInteractionEnabled被忽略。

4 个答案:

答案 0 :(得分:4)

previous answer(和文档)中所述,要禁用注释视图上的触摸,您可以将其enabled属性设置为NO


canShowCallout设置为NO潜在的替代方案。但是,这不会阻止didSelectAnnotationViewdidDeselectAnnotationView委托方法仍然被调用(即使不会显示标注)。这可能是一个问题,具体取决于您的情况。

答案 1 :(得分:2)

 -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
 (id <MKAnnotation>)annotation
{
MKPinAnnotationView *pinView = nil; 

//NSLog(@"my loc : %@",mapView.userLocation);

if(annotation != mapView.userLocation) 
{
    static NSString *defaultPinID = @"any";

    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

    if ( pinView == nil )
      {
        pinView = [[MKPinAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:defaultPinID] ;
      }
//this property may help you  

    pinView.canShowCallout = NO;
}

答案 2 :(得分:1)

SWIFT 4示例

我们可以实现我们的目标-使用一种非常简单的委托方法 对MKAnnotationView 禁用触摸

extension MyViewController: MKMapViewDelegate {

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    for view in views {
        view.isEnabled = false
    }
}

}

如果此属性的值为false,则注释视图将忽略触摸事件,因此无法选择。 结合扩展和总结,我们得到了一种优雅的方法,可以通过MKMapViewDelegate协议一致性和不可选择的MKAnnotationView扩展ViewController!

答案 3 :(得分:0)

在您创建它们的方法中将用户交互的MKPinAnnotationView * pinView或MKAnnotationView * annotationView属性设置为NO,即

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
 (id <MKAnnotation>)annotation{

static NSString *annotation = @"identifier";

   MKAnnotationView * aView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

    if ( aView == nil )
      {
        aView = [[MKAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:annotation] ;
      }
[aView setUserInteractionEnabled:NO];
}