我希望你能帮助我。我正在为学校做一些家庭作业,我们必须创建一个项目,它接受一组对象并从地图上的那些对象创建地图注释。我的对象有两个值,一个是NSString *标题,另一个是名为coord的cllocationcoordinate2d。我有一个for循环填充地图视图上的地图注释,从数组中获取这些对象。
我的问题是:对于我的任务,我应该有一个从数组中删除某些对象的选项,并让地图视图从注释中删除那些已删除的对象。我不应该清除所有注释并重新填充它们没有删除的对象。换句话说,我想知道是否有办法从该方法外部选择在for循环中创建的某个注释。我是否需要在注释对象中创建自定义id参数?
我会粘贴代码,但我不确定你需要看到什么。此外,如果这个问题含糊不清或令人困惑,我道歉;我之前从未真正使用过这个网站,也没有真正的问题。先感谢您。
答案 0 :(得分:0)
试试这段代码,
NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] init];
for (int i = 0; i < [mapView.annotations count]; i++) {
NSString *anonotationTitle = [[mapView.annotations objectAtIndex:i] title];
if([annotationTitle isEqualToString:@"titleToDelete"]){
[annotationsToRemove addObject:[mapView.annotations objectAtIndex:i]];
}
}
[mapView removeAnnotations:annotationsToRemove];
答案 1 :(得分:0)
好的,您可以创建MKAnnotationView
的自定义注释子类。
例如:
<强> MyCustomAnnotationView.h 强>
#import <Foundation/Foundation.h>
@class MKAnnotationView;
@interface MyCustomAnnotationView : MKAnnotationView
@property (nonatomic, strong) NSString* customId;
@end
<强> MainViewController.m 强>
...
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
static NSString* annotationIdentifier = @"annotationIdentifier";
MyCustomAnnotationView* annotationView =
(MyCustomAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
annotationView.customId = [dataSource title];
....
}
....
并通过customId
媒体
答案 2 :(得分:0)
您打算如何选择删除哪些注释?如果通过点击附件控件(当您点击一个图钉时弹出的窗口右侧的小图标)来完成,那么您可以获得对注释的引用并将其从地图中删除,如下所示
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
MKAnnotation *tappedAnnotation = view.annotation;
[mapView removeAnnotation:tappedAnnotation];
}