由于某些奇怪的原因,细节按钮不知何故停止出现:
- (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;
}
这是输出。 提前致谢。
答案 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;
}