【问题标题】:How to delete the last annotation on a mapView如何删除mapView上的最后一个注释
【发布时间】:2013-07-26 23:02:22
【问题描述】:

我在我的 .xib 文件上添加了一个按钮,我想用它删除最后添加的注释。

所以在 Touch-Down 动作中我实现了这个:

-(IBAction)DeleteAnnotation:(id)sender {
   [mapview removeAnnotation:[mapview.annotations lastObject]];
}

我什至试过这样:

-(IBAction)DeleteAnnotation:(id)sender {
   [self.mapview removeAnnotation:self.mapview.annotations.lastObject]];
}

mapview 是我的MKMapView 出口。

我遇到的两种方式的问题是我必须多次按下此特定按钮才能删除注释。

此外,注释会以非常随机的方式自行删除。

是我做错了什么还是软件和模拟器问题?

【问题讨论】:

    标签: ios mkmapview mapkit mkannotation


    【解决方案1】:

    MKMapViewannotations 属性不能保证按照您添加它们的顺序返回注释。

    假设annotations 数组属性将按照您添加注释的顺序返回注释,这很可能是您看到“奇怪”行为的原因。有关更多详细信息,请参阅这些相关答案:


    为了获得您想要的行为(我假设只是“删除我的代码显式添加的最后一个注释”),这里有三种可能的方法(可能还有其他方法):

    1. 最简单的方法是在强属性中保留对您添加的最后一个注释的引用(当您调用addAnnotation 时更新该引用)。当您想删除“最后添加的注释”时,将保存的引用传递给removeAnnotation。例如:

      //in the interface...
      @property (nonatomic, strong) id<MKAnnotation> lastAnnotationAdded;
      
      //in the implementation...
      
      //when you add an annotation:
      [mapview addAnnotation:someAnnotation];
      self.lastAnnotationAdded = someAnnotation;  //save the reference
      
      //when you want to remove the "last annotation added":
      if (self.lastAnnotationAdded != nil)
      {
          [mapview removeAnnotation:self.lastAnnotationAdded];
          self.lastAnnotationAdded = nil;
      }
      
    2. 另一种选择是遍历地图视图的annotations 数组并搜索“最后一个”注释(或您感兴趣的任何属性)。一旦您引用了“最后一个”对象(不一定是数组中的最后一个对象),您就可以在其上调用 removeAnnotation。这种方法假设您在注释对象本身中有一些属性,可以让您将注释标识为“最后一个”。这可能并不总是可行的。

    3. 另一种选择是保留您自己的注释数组,并在调用addAnnotation 时将注释对象添加到该数组中。这类似于仅保留对“添加的最后一个注释”的单一引用,除非您按照可以依赖的顺序跟踪整个列表。要删除“最后一个”,您将从数组而不是地图视图中获得lastObject(假设您按该顺序保留数组)。在地图中添加/删除注释时,您必须确保阵列保持同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多