iphone - iOS- MKAnnotationView 上的获取按钮以删除 pin

标签 iphone objective-c ios

我创建了一个 MKAnnotationView并添加 UIButton在上面。现在我想要那个按钮来移除它所在的引脚。

这就是我添加按钮的方式:

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinAnnotation = nil;
    if(annotation != myMapView.userLocation) 
    {
        NSString *defaultPinID = [[NSString alloc] initWithFormat:@"pin%d",pinCount];
        pinAnnotation = (MKPinAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinAnnotation == nil )
            pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
        pinAnnotation.canShowCallout = YES;

    //// ADDING MY BUTTON
        UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinAnnotation.rightCalloutAccessoryView = deleteButton;
    //// ADDING IT'S ACTION
        [deleteButton addTarget:self action:@selector(deletePin) forControlEvents:UIControlEventTouchUpInside];
    }
    pinCount++;
    return pinAnnotation;
}

如您所见,我将操作设置为调用此方法:
-(void)deletePin
{
    //What to put here...?
}

如何使该操作删除它的按钮图钉?

我想也许可以发送 id通过什么的,但我不知道如何。

最佳答案

对于注释标注附件 View ,不要使用您自己的目标/操作方法。

相反,使用 map View 的 calloutAccessoryControlTapped委托(delegate)方法,这将使这项工作更容易。

删除 addTarget行和您的自定义方法。然后实现委托(delegate)方法:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
            calloutAccessoryControlTapped:(UIControl *)control
{
    [mapView removeAnnotation:view.annotation];
}

此外,不相关,但是您设置重用标识符的方式是错误的,并且通过为每个注释分配不同的 id 来破坏可重用性。建议如下:
- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinAnnotationView = nil;
    if (annotation != myMapView.userLocation) 
    {
        NSString *reuseId = @"StandardPin";
        pinAnnotationView = (MKPinAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
        if ( pinAnnotationView == nil )
        {
            pinAnnotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId] autorelease];
            pinAnnotationView.canShowCallout = YES;

            UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            pinAnnotationView.rightCalloutAccessoryView = deleteButton;
        }
        else
            //update annotation property if view is being re-used...
            pinAnnotationView.annotation = annotation;
    }

    return pinAnnotationView;
}

关于iphone - iOS- MKAnnotationView 上的获取按钮以删除 pin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916293/

相关文章:

iphone - 如何从 iPhone 相机进行快速图像处理?

iphone - 录音时减少/过滤背景白噪声

ios - Segue 到 Storyboard 中的 Person ViewController

ios - UINavigationController 替代品

iOS App > 无法设置远程报价 sdp : Called with SDP without DTLS fingerprint

iphone - 用于在 iPhone 中调用电话的 Skype URL 处理程序是什么?

iphone - 如何通过缩放呈现 UIViewController?

ios - Xcode找不到头文件

ios - 您可以使用 Swift 将非规范化解析服务器查询结果聚合到一条语句中吗?

iphone - iOS 核心数据 : Confused about Core Data and database