无法选择注释?

时间:2012-03-22 11:53:06

标签: objective-c ios select annotations android-mapview

我在地图视图上有一个注释。我可以通过编程方式选择它,但我点击它没有任何反应。你可以帮帮我吗?有没有人遇到类似的问题?这是设置anotations的方法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MapVC"];
    if (!aView) {
        aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MapVC"];
        aView.canShowCallout = YES;
        aView.draggable=YES;
        aView.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
        // could put a rightCalloutAccessoryView here
    }
    aView.annotation = annotation;
    [(UIImageView *)aView.leftCalloutAccessoryView setImage:nil];
    return aView;
}

将它们添加到地图视图中:

- (void)updateMapView
{
    if (self.mapView.annotations) [self.mapView removeAnnotations:self.mapView.annotations];
    if (self.annotation) [self.mapView addAnnotation:self.annotation];
}

对于按下注释的反应:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView
{
    NSLog(@"did select annotation");
}

顺便说一句,方法[self.mapView selectAnnotation:annotation]有效,但没有提出标注(我用断点检查了它)。虽然只是录制注释不会(再次通过断点)。

2 个答案:

答案 0 :(得分:7)

如果注释的title为空或空白,则不会显示标注(即使其他所有内容都已正确设置,包括canShowCallout)。

点击注释时,将调用didSelectAnnotationView委托方法,如果注释具有非空白title,则会显示标注。


关于你在评论中提出的问题:

  

...是不是我有一个单独的类来包装我的所有数据,我的   annotation类包含该数据类的实例?

这没有什么不妥。
如果你想将与地图相关的逻辑与基类分开,那很好,对于复杂的应用程序来说可能是一个好主意,其中基础数据类可能不仅仅用于注释。

如果您的应用程序非常简单并且数据仅用于注释,那么您可以保持简单并将两者结合起来,但这不是必需的。

只要您坚持使用直接引用而不是尝试,例如,使用数组索引或视图/按钮标记链接回注释中的某些数据对象,“正确”类实现取决于什么适用于你的应用。

答案 1 :(得分:3)

如果没有,请尝试将MKAnnotationView的canShowCallout属性设置为YES。