DetailDisclosure按钮未显示在注释视图中

时间:2011-10-05 17:15:05

标签: iphone mkmapview

由于某些奇怪的原因,细节按钮不知何故停止出现:

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *pinAnnotation = nil;
if(annotation != mapView.userLocation) 
{
    MKPinAnnotationView *pinAnnotation = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"sadasdasd"];
    if ( pinAnnotation == nil ){
        pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"sadasdasd"] autorelease];

        /* add detail button */
        NSLog(@"Here");

        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinAnnotation.rightCalloutAccessoryView = infoButton;


    }

}

return pinAnnotation;
}

这是输出。 提前致谢。

1 个答案:

答案 0 :(得分:3)

第一个问题是pinAnnotation在该方法中被声明两次。

进入if(annotation != mapView.userLocation)...区块的第一行和第二行。因此,return语句返回nil,因为永远不会设置外部变量(导致默认的MKAnnotationView标注没有附件)。

将第二个声明更改为一个作业。

下一个问题是您需要将canShowCallout设置为YES,因为NO的默认值为MKPinAnnotationView。您可以在设置附件视图后执行此操作:

pinAnnotation.canShowCallout = YES;

以上内容应修复未显示的配件按钮。


不相关,但您还需要在重新使用时设置视图的annotation属性(在出列后它不是nil的情况下)。因此,在else

中添加if (pinAnnotation == nil)
else {
    //annotation view being re-used, set annotation to current...
    pinAnnotation.annotation = annotation;
}