如何将Button添加到userLocation标注?

时间:2010-07-12 05:09:31

标签: iphone objective-c

如何在Apple Maps应用程序的userLocation(蓝点)标注中显示DisclosureButton?

现在我可以更改其标题和副标题,但我希望提供自定义标注视图。因此,如果我点击蓝点,它除了标题和副标题外还可以显示一个按钮。这样,当我点击按钮时,它可以引导我到另一个视图。 当注释== self.mapView.userLocation时,我在viewForAnnotation中返回了MKAnnotationView。但是,标注可以显示更新的标题和副标题,但不能显示我添加的按钮。

我真的需要这个功能,我希望得到任何帮助和建议!

3 个答案:

答案 0 :(得分:10)

我已经尝试了 camdaochemgio 的解决方案,但它仅适用于第二次点击。这是一个始终有效的解决方案:

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for (MKAnnotationView* view in views)
    {
        if ([view.annotation isKindOfClass:[MKUserLocation class]])
        {
            view.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        }
    }
}

答案 1 :(得分:2)

对于annotationView,请设置

myAnnotationView.canShowCallout=YES;

然后添加两个按钮

myAnnotationView.leftCalloutAccessoryView=myLeftButton;

myAnnotationView.rightCalloutAccessoryView=myRightButton;

按钮可以是普通按钮,自定义按钮或其中一种预定义类型。像这样:

myAnnotationView.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];

然后添加calloutAccessoryControlTapped:方法来处理点按。

答案 2 :(得分:1)

也许迟到了。 这是解决方案。您可以按如下方式实现UIMapViewDelegete方法:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
    if ([view.annotation isKindOfClass:[MKUserLocation class]] && !view.rightCalloutAccessoryView) {
        view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    }
}