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

发布于 2024-12-08 11:49:44 字数 801 浏览 1 评论 0原文

由于某种奇怪的原因,详细信息按钮以某种方式停止出现:

- (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;
}

这是输出。 提前致谢。

For some odd reason the detail button somehow stopped appearing:

- (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;
}

Here is output.
Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终止放荡 2024-12-15 11:49:44

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

一次在第一行,第二行在 if(annotation != mapView.userLocation)... 块中。因此,return 语句返回 nil,因为外部变量从未设置(导致默认的 MKAnnotationView 标注没有附件)。

将第二个声明更改为赋值。

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

pinAnnotation.canShowCallout = YES;

上面应该修复附件按钮不显示的问题。

不相关,但在重用视图时(在出队后不为 nil 的情况下),您还需要设置视图的 annotation 属性。因此,将 else 块添加到 if (pinAnnotation == nil) 中:

else {
    //annotation view being re-used, set annotation to current...
    pinAnnotation.annotation = annotation;
}

First problem is that pinAnnotation is declared twice in that method.

Once in the first line and second in the if(annotation != mapView.userLocation)... block. Because of this, the return statement returns nil because the outer variable is never set (resulting in a default MKAnnotationView callout with no accessory).

Change the second declaration to just an assignment.

Next problem is that you need to set canShowCallout to YES because the default is NO for an MKPinAnnotationView. You can do this after setting the accessory view:

pinAnnotation.canShowCallout = YES;

The above should fix the accessory button not showing.

Unrelated, but you also need to set the view's annotation property when it is being re-used (in the case when it is not nil after the dequeue). So add an else block to the if (pinAnnotation == nil):

else {
    //annotation view being re-used, set annotation to current...
    pinAnnotation.annotation = annotation;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文