gpt4 book ai didi

ios - 如何删除mapView上的最后一个注释

转载 作者:行者123 更新时间:2023-12-01 19:09:05 25 4
gpt4 key购买 nike

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

所以在 Touch-Down Action 中我已经实现了这个:

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

我什至这样尝试过:
-(IBAction)DeleteAnnotation:(id)sender {
[self.mapview removeAnnotation:self.mapview.annotations.lastObject]];
}

在哪里 mapview是我的 MKMapView导出。

我遇到的两种方式的问题是,在删除注释之前,我必须多次按下这个特定的按钮。

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

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

最佳答案

annotations MKMapView 的属性(property)不保证以您添加它们的相同顺序返回注释。

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

  • MKMapView annotations changing/losing order?
  • How to reorder MKMapView annotations array

  • 为了获得您想要的行为(我假设只是“删除我的代码显式添加的最后一个注释”),这里有三种可能的方法(可能还有其他方法):
  • 最简单的方法是在强属性中保留对您添加的最后一个注释的引用(当您调用 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;
    }
  • 另一种选择是遍历 map View 的annotations。数组并搜索“最后一个”注释(或您感兴趣的任何属性)。一旦你引用了“最后一个”(不一定是数组中的最后一个对象),你可以调用 removeAnnotation在上面。这种方法假设您在注释对象本身中有一些属性,可以让您将注释标识为“最后一个”。这可能并不总是可能的。
  • 另一种选择是保留自己的注释数组,并在调用 addAnnotation 时将注释对象添加到该数组中。 .这类似于保持对“添加的最后一个注释”的单一引用,除了您按照可以依赖的顺序跟踪整个列表。要删除“最后一个”,您会得到 lastObject从您的数组而不是 map View 的(假设您按该顺序保留数组)。在从 map 中添加/删除注释时,您必须确保保持阵列同步。
  • 关于ios - 如何删除mapView上的最后一个注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892362/

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