MapKit引脚不显示leftCalloutAccessoryView

时间:2013-06-03 00:06:17

标签: ios objective-c mapkit mkannotationview

我正在关注iOS 5版本的Paul Hegarty关于ios app开发的讲座,我正在完成作业5。

所以基本上我需要在地图上显示一堆图像,其中包含Flickr提供的数据。

我确定了主要工作并显示标题和副标题,但是,当我尝试将UIImageView作为leftCalloutAccessoryView时,它无效。

所以我将地图视图控制器设置为viewDidLoad中mapView的委托,并且它符合MKMapViewDelegate协议。

我实现了以下两种方法:

- (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.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
    }
    aView.annotation = annotation;
    [(UIImageView *)aView.leftCalloutAccessoryView setImage:nil];
    return aView;
}

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
    UIImage *image = [self.delegate mapViewController:self imageForAnnotation:view.annotation];
    [(UIImageView *)view.leftCalloutAccessoryView setImage:image];
}

然而,当我点击一个图钉时,它只显示标题和副标题。我不知道发生了什么,因为在这一步基本上我的所有代码都与他在视频中的例子类似,我不确定我缺少什么。

感谢您的帮助!

---------------------------------更新:------------ ----------------------

我发现了我的问题。

问题是我segue进入了mapViewController,我在prepareForSegue中添加了注释,但是mapView是控制器的IBOutlet并且它尚未在prepareForSegue中设置,所以基本上我需要使用mapView中传递给控制器​​的注释再次更新viewDidLoad,这确实解决了问题。

希望这可以帮助那些有类似问题的人!

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题,请参阅相关的 更新 部分。