gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:02:07 25 4
gpt4 key购买 nike

我创建了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com