gpt4 book ai didi

ios - 对 MKPointAnnotation 执行后端操作

转载 作者:行者123 更新时间:2023-11-28 18:41:21 25 4
gpt4 key购买 nike

我已经使用 MKPointAnnotation(s) 在 MKMapView 上填充了几个位置。在点击注释时,我显示了一些带有 UIActionSheet 菜单的选项。这些选项具有一些删除功能,当用户点击 UIActionSheet 上的删除选项时,这些功能会删除 map 上选定的注释。问题是我无法确定点击了哪个注释点,我似乎没有引用它。

添加注解点的代码为:

while(looping array of locations)
{
MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = {coord of my location}
annotationPoint.title = [anObject objectForKey:@"castTitle"];
annotationPoint.subtitle = [anObject objectForKey:@"storeName"];

[self.mainMapView addAnnotation:annotationPoint];
}

在点击注释时显示 UIActionSheet 的代码是:

-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;

static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];

pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
pinView.pinColor = [self getAnnotationColor];

UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
[rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView = rightButton;

return pinView;
}

-(IBAction)showOptions:(id)sender
{
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"", @"") delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Delete", @"Delete"), nil];

[sheet showInView:[self.view window]];
}

最佳答案

您还可以创建一个继承自 MKPointAnnotation 的类,并添加一个 id 属性,然后使用您的类:

@interface MyPointAnnotation : MKPointAnnotation 

@property int pointId;

@end

然后在你的 View Controller 中使用它:

创建注释:

    MyPointAnnotation *myAnnotation = [[MyPointAnnotation alloc]init];
myAnnotation.coordinate= someCoordinates;
[myAnnotation setTitle:@"i am annotation with id"];
myAnnotation.pointId = 1;
[self.mapView addAnnotation:myAnnotation];

如果您有一个坐标数组,您可以循环并创建注释。

您甚至可以通过其 id 自定义注释 View :

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{

MKPinAnnotationView *view=(MKPinAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"reuseme"];
if (!view) {
view=[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"reuseme"];
}


if (((MyPointAnnotation *)annotation).pointId == 1)
{
//the annotation with id 1.
}
return view;
}

关于ios - 对 MKPointAnnotation 执行后端操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530169/

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