2012-06-02 23 views
35

mapView से मेरी टिप्पणियों को हटाने के लिए removeAnnotations का उपयोग करता हूं लेकिन यह उपयोगकर्ता स्थान एन को हटा देता है। मैं इसे कैसे रोक सकता हूं, या उपयोगकर्ता को वापस देखने के लिए कैसे वापस ले सकता हूं?उपयोगकर्ता स्थान एनोटेशन को छोड़कर मैं MKMapView से सभी एनोटेशन कैसे हटा सकता हूं?

NSArray *annotationsOnMap = mapView.annotations; 
     [mapView removeAnnotations:annotationsOnMap]; 

उत्तर

81

अद्यतन:

मैं आईओएस 9 एसडीके उपयोगकर्ता एनोटेशन नहीं रह गया है हटा दिया जाता है के साथ की कोशिश की। आप बस (आईओएस पर चलने वाले आईओएस 9 से पहले क्षुधा के लिए)

mapView.removeAnnotations(mapView.annotations) 

ऐतिहासिक जवाब का उपयोग कर सकते हैं:

NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ; 
[ annotationsToRemove removeObject:mapView.userLocation ] ; 
[ mapView removeAnnotations:annotationsToRemove ] ; 

संपादित करें:

इस प्रयास करें स्विफ्ट संस्करण

let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation } 
mapView.removeAnnotations(annotationsToRemove) 
+1

धन्यवाद! मुझे ठीक इसी की आवश्यकता थी! –

+0

Thanx ..... Buddy – user968597

+0

मुझे भी धन्यवाद :) –

3

अपने उपयोगकर्ता स्थान MKUserLocation के वर्ग की तरह है, तो isKindOfClass का उपयोग उपयोगकर्ता स्थान एनोटेशन को हटाने से बचने के लिए।

if (![annotation isKindOfClass:[MKUserLocation class]]) { 

} 

वरना आप – mapView:viewForAnnotation: में अपनी टिप्पणियों को की तरह पहचान करने के लिए एक ध्वज सेट कर सकते हैं।

+0

धन्यवाद है! मुझे यह याद होगा –

-1

हाय कोशिश करें मुझे हल मिल गया इस कोड से आयन:

NSMutableArray*listRemoveAnnotations = [[NSMutableArray alloc] init]; 
[Mapview removeAnnotations:listRemoveAnnotations]; 

[listRemoveAnnotations release]; 
+0

यह सवाल का जवाब नहीं देता है। असल में यह कोड कोई प्रभाव नहीं है - 'listRemoveAnotations' खाली है जब '-removeAnimations' कहा जाता है। – nielsbot

19

नक्शे से सभी एनोटेशन साफ़ करने के लिए:

[self.mapView removeAnnotations:[self.mapView annotations]]; 

MapView

से
for (id <MKAnnotation> annotation in self.mapView.annotations) 
{ 
    if (![annotation isKindOfClass:[MKUserLocation class]]) 
    { 
       [self.mapView removeAnnotation:annotation]; 
    } 

} 

आशा यह आप मदद कर सकते हैं निर्दिष्ट एनोटेशन निकालने के लिए।

+1

यह उत्तर स्वीकार किए गए एक से अधिक संक्षिप्त है। – shapeare

6

स्विफ्ट के लिए आप बस एक एक लाइनर का उपयोग कर सकते हैं:

mapView.removeAnnotations(mapView.annotations) 

संपादित करें: nielsbot उल्लेख किया है, यह उपयोगकर्ता की स्थान एनोटेशन हटा देंगे जब तक आप इसे स्थापित किया है ऊपर इस तरह:

mapView.showsUserLocation = true 
+0

यह सभी एनोटेशन को हटा देता है, जो ओपी चाहता था। – nielsbot

+0

धन्यवाद, मैंने अभी अपना जवाब अपडेट किया है। – raspi

+0

ऐसा मत सोचो कि यह भी काम करता है। क्या तुमने कोशिश की? – nielsbot

0

कुछ NSPredicate फ़िल्टर के बारे में कैसे?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)]; 
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate]; 
[self.mapView removeAnnotations:nonUserAnnotations]; 

जीवन हमेशा NSPredicate के साथ बेहतर फ़िल्टर कर