设置MKMapViewDelegate使我的标记在iOS中消失

时间:2013-07-02 16:08:41

标签: ios mapkit

我正在使用MapKit,我遇到了确切的问题。

这是我的代码:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    static NSString *identifier = @"MyLocation";
    if ([annotation isKindOfClass:[MyLocation class]]) {

        MKAnnotationView *annotationView = (MKAnnotationView *) [mymap_ios dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (annotationView == nil) {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
            annotationView.enabled = YES;
            annotationView.canShowCallout = YES;

        } else {
            annotationView.annotation = annotation;
        }
        annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        return annotationView;
    }

    return nil;
}

在这段代码中,我可以看到它旁边的引脚而不是蓝色按钮。似乎我忘记了这样做:

mymap_ios.delegate=self;

但是当我添加它时,标记根本不显示。

你可以帮我吗?

1 个答案:

答案 0 :(得分:2)

如果您未设置地图视图的delegate,则不会调用viewForAnnotation并创建默认的红色图钉,而不会显示任何附件按钮。


当您设置delegate时,它会调用您的viewForAnnotation方法,但您创建了一个普通的MKAnnotationView ,默认情况下没有任何预先设置的图片或视图(它是空白的) )


设置注释视图的image,向视图添加一些内容,或者只创建MKPinAnnotationView而不是MKAnnotationView

MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [mymap_ios ...
    if (annotationView == nil) {
        annotationView = [[MKPinAnnotationView alloc] init...


还要确保您添加的注释对象的类型为MyLocation,否则它们将显示为没有附件按钮的纯红色引脚。