1

我希望你能帮助我。我正在为学校做一些家庭作业,我们必须创建一个项目,该项目采用一组对象并从地图上的这些对象创建地图注释。我的对象有两个值,一个是 NSString *title,另一个是名为 coord 的 cllocationcoordinate2d。我有一个 for 循环填充我的地图视图上的地图注释,从数组中获取这些对象。

我的问题是:对于我的任务,我应该可以选择从我的数组中删除某些对象,并让地图视图从注释中删除那些已删除的对象。我不应该清除所有注释并在没有删除对象的情况下重新填充它们。换句话说,我想知道是否有办法从该方法的外部选择在 for 循环中创建的某个注释。我需要在我的注释对象中创建一个自定义 id 参数吗?

我会粘贴代码,但我不确定你需要看到什么。另外,如果这个问题含糊不清或令人困惑,我深表歉意;我以前从未真正使用过这个网站,也不必向任何人提出问题。先感谢您。

4

3 回答 3

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];
于 2013-02-21T07:59:10.217 回答
0

好的,您可以创建MKAnnotationView.

例如:

MyCustomAnnotationView.h

#import <Foundation/Foundation.h>
@class MKAnnotationView;

@interface MyCustomAnnotationView : MKAnnotationView
@property (nonatomic, strong) NSString* customId;

@end

主视图控制器.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并通过您的财产从您的数据源中删除他

于 2013-02-21T08:10:52.097 回答
0

您打算如何选择要删除的注释?如果是通过点击附件控件(点击针时弹出的窗口右侧的小图标)完成的,那么您可以获得对注释的引用并将其从地图中删除,如下所示

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

参考: MKMapViewdelegate

于 2013-02-21T19:31:15.520 回答