如何在iPhone上点击按钮调用pin注释

时间:2011-05-19 12:54:31

标签: iphone objective-c mapkit

我不希望pin直接在地图上调用,我想在按钮操作上调用pin注释。

当我在按钮点击事件上调用此方法时,我的应用程序崩溃了。我想在按钮点击上调用注释。我可以在按钮上调用所有方法吗?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *pin = (MKPinAnnotationView *) [self.map dequeueReusableAnnotationViewWithIdentifier: @"restMap"];
    if (pin == nil) {
        pin = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"restMap"] autorelease];
    } else {
        pin.annotation = annotation;
    }
    pin.pinColor = MKPinAnnotationColorRed
    pin.canShowCallout = YES;
    pin.animatesDrop = NO;
    UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    NSInteger annotationValue = [self.annotations indexOfObject:annotation];
    detailButton.tag = annotationValue;
    [detailButton addTarget:self action:@selector(showDetailView:) forControlEvents:UIControlEventTouchUpInside];
    pin.rightCalloutAccessoryView = detailButton;
    return pin;
}  

1 个答案:

答案 0 :(得分:0)

您尝试调用的方法是mapView委托方法,只能由MapView调用。此方法仅用于在mapView需要时“按需”提供注释视图。即当注释进入或即将移动到mapView的可见区域时。

您需要向mapView添加注释对象。该对象必须符合MKAnnotation协议。 http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKAnnotation_Protocol/

通过在按下按钮时调用的IBAction方法中调用[yourMapView addAnnotation:yourAnnotationObject],可以将对象添加到mapView。