在地图上单击MKAnnotationViews时,它们会暂时显示在前面。我不想要这种行为,我有很多MKAnnotationViews,它们只是地图上没有任何其他功能的图标。
我已尝试将MKAnnotationView userInteractionEnabled
设置为NO
但不起作用。触摸时MKAnnotationView仍然在前面。这是令人困惑的,因为MKAnnotationView只是一个UIView所以我无法解决为什么userInteractionEnabled
被忽略。
答案 0 :(得分:4)
如previous answer(和文档)中所述,要禁用注释视图上的触摸,您可以将其enabled
属性设置为NO
。
将canShowCallout
设置为NO
是潜在的替代方案。但是,这不会阻止didSelectAnnotationView
和didDeselectAnnotationView
委托方法仍然被调用(即使不会显示标注)。这可能是一个问题,具体取决于您的情况。
答案 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];
}