2010-02-24 17 views
6

ठीक है, तो आप आम तौर पर है किसी वस्तु एक्स आप चाहते हैं एक MKMapView के अंदर पर टिप्पणी की जा करने के लिए।यह जानने के लिए कि कौन सा एमकेएनोटेशन टैप किया गया है, साफ समाधान?

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control; 

क्या साफ समाधान है: जब कुछ कॉलआउट उपयोग किया जाता है, आप के अंदर घटना संभाल

DDAnnotation *annotation = [[DDAnnotation alloc] initWithCoordinate: poi.geoLocation.coordinate title: @"My Annotation"]; 
[_mapView addAnnotation: annotation]; 

तो फिर तुम अंदर

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation; 

और एनोटेशन दृश्य बनाते हैं: आप इस तरह से करना एक्स को नवीनतम टैप इवेंट में पास करने के लिए?

उत्तर

17

मैं अपने प्रश्न को समझने कर रहा हूँ, तो आप ऐसा अपने calloutAccessoryControlTapped विधि में आप वस्तु का उपयोग कर सकते हैं जो आपके DDAnnotation वर्ग के लिए एक संदर्भ या संपत्ति जोड़ना चाहिए।

@interface DDAnnotation : NSObject <MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    id objectX; 
} 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
@property (nonatomic, retain) id objectX; 

जब आप एनोटेशन बनाएं:

DDAnnotation *annotation = [[DDAnnotation alloc] initWithCoordinate:poi.geoLocation.coordinate title: @"My Annotation"]; 
annotation.objectX = objectX; 
[_mapView addAnnotation: annotation]; 

तब:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{ 

    DDAnnotation *anno = view.annotation; 
    //access object via 
    [anno.objectX callSomeMethod]; 
} 
+0

धन्यवाद! मैंने MKAnotationView इंटरफ़ेस की एनोटेशन प्रॉपर्टी नहीं देखी! यही वह था जिसे मैं ढूंढ रहा था! –

0

मैं इस किया था और यह ठीक काम किया!

यह बिल्कुल क्योंकि मैं कुछ करने के लिए जब नक्शा उपयोग किया गया था, लेकिन एनोटेशन प्रवाह में नल दे सामान्य रूप से की जरूरत है कि मैं क्या जरूरत है।

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIGestureRecognizer *g = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)] autorelease]; 
    g.cancelsTouchesInView = NO; 
    [self.mapView addGestureRecognizer:g]; 

} 

- (void) handleGesture:(UIGestureRecognizer*)g{ 
    if(g.state == UIGestureRecognizerStateEnded){ 
     NSSet *visibleAnnotations = [self.mapView annotationsInMapRect:self.mapView.visibleMapRect]; 
     for (id<MKAnnotation> annotation in visibleAnnotations.allObjects){ 
      UIView *av = [self.mapView viewForAnnotation:annotation]; 
      CGPoint point = [g locationInView:av]; 
      if([av pointInside:point withEvent:nil]){ 
       // do what you wanna do when Annotation View has been tapped! 
       return; 
      } 
     } 
     //do what you wanna do when map is tapped 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे