2013-02-21 3 views
1

Надеюсь, вы можете мне помочь. Я работаю над домашней работой в школе, и нам нужно создать проект, который принимает массив объектов и создает аннотации карт из этих объектов на карте. Мои объекты имеют два значения, один из которых - заголовок NSString *, а другой - cllocationcoordinate2d, называемый координатой. У меня есть цикл, заполняющий аннотации карт на моем представлении карты, принимая эти объекты из массива.Как удалить аннотации, созданные в цикле for

Мой вопрос заключается в следующем: для моего назначения у меня должна быть возможность удалить определенные объекты из моего массива, а отображение карты удалит эти удаленные объекты из аннотаций. Я НЕ должен очищать все аннотации и повторно заполнять их без удаленных объектов. Другими словами, мне интересно, есть ли способ выбрать определенную аннотацию, созданную в цикле for вне этого метода. Должен ли я создать собственный аргумент id в моем объекте аннотации?

Я бы вставлял код, но я не совсем уверен, что вам нужно будет видеть. Кроме того, я приношу свои извинения, если этот вопрос является неопределенным или запутанным; Я никогда раньше не использовал этот сайт, и мне не приходилось сталкиваться с вопросами. Заранее спасибо.

ответ

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]; 
+0

это не было просто создать второй экземпляр аннотации, тот, который хранится в массиве myAnnotations, но на самом деле не ставится на карте? – DaveyDaVinci

+0

Преимущество этого в том, что вы можете выполнить итерацию по второму массиву аннотаций, получить аннотацию, которую вы хотите удалить (может быть, проверить заголовок аннотации), а затем удалить эту аннотацию с вашей карты. –

+0

У меня есть свойство, заданное для заголовка в моем классе аннотации. Есть ли способ захватить аннотацию из массива mapview.annotations, используя этот заголовок, который я создал? – DaveyDaVinci

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 собственности

+0

Спасибо, я буду изучать это немного больше завтра c: – DaveyDaVinci

+0

Добро пожаловать! –

0

Как вы собираетесь выбирать, какие аннотации удаляются? Если это делается, нажав на вспомогательный элемент управления (маленький значок справа от окна, который появляется, когда вы нажимаете на контакт), вы можете получить ссылку на аннотацию и удалить ее с карты, подобной этому

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

Ref: MKMapViewdelegate

Смежные вопросы