2011-10-28 14 views
12

मैं सोच रहा था कि कोई मुझे बता सकता है कि नक्शा एनोटेशन में सही कॉलआउट एक्सेसरी कैसे जोड़ना है। जो कुछ भी मैं कोशिश करता हूं वह कहीं भी नहीं लग रहा है, इसलिए किसी भी मदद की सराहना की जाएगी।दायां कॉलआउट एक्सेसरी विधि और कार्यान्वयन

संपादित

मैं कोड की इस पंक्ति की कोशिश की है लेकिन कुछ भी अलग एनोटेशन होता है।

- (MKAnnotationView *)mapview:(MKMapView *)sender viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
MKAnnotationView *aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@""]; 
aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
aView.canShowCallout = YES; 
aView.annotation = annotation; 
return aView; 
} 
+0

आप दिखा सकते हैं कि तुम क्या करने की कोशिश की और वास्तव में क्या त्रुटियों या समस्याओं आप मिल सकता है? – Anna

उत्तर

34

विधि का नाम गलत है। यह एक राजधानी V साथ mapView होना चाहिए:

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

ऑब्जेक्टिव-सी केस-संवेदी है।

यदि विधि अभी भी कॉल नहीं की जाती है, तो दूसरी समस्या यह है कि मानचित्र दृश्य का delegate सेट नहीं है। कोड में, इसे self पर सेट करें या इंटरफ़ेस बिल्डर में प्रतिनिधि को फ़ाइल के स्वामी से संलग्न करें।

यह भी सुनिश्चित करें कि आप इसे जोड़ने से पहले एनोटेशन के title सेट करें अन्यथा कॉलआउट अभी भी दिखाई नहीं देगा।

उपरोक्त परिवर्तनों को सहायक बटन को प्रदर्शित नहीं करना चाहिए।


कुछ अन्य असंबंधित सुझाव ...

viewForAnnotation में, आप dequeueReusableAnnotationViewWithIdentifier फोन करके एनोटेशन दृश्य पुनः उपयोग का समर्थन करना चाहिए:

- (MKAnnotationView *)mapView:(MKMapView *)sender viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    static NSString *reuseId = @"StandardPin"; 

    MKPinAnnotationView *aView = (MKPinAnnotationView *)[sender 
       dequeueReusableAnnotationViewWithIdentifier:reuseId]; 
    if (aView == nil) 
    { 
     aView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation 
        reuseIdentifier:reuseId] autorelease]; 
     aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     aView.canShowCallout = YES; 
    } 

    aView.annotation = annotation; 

    return aView; 
} 

अपनी परियोजना एआरसी उपयोग करता है, autorelease को हटा दें।


वैसे, गौण बटन प्रेस करने के लिए प्रतिक्रिया करने के लिए, calloutAccessoryControlTapped प्रतिनिधि विधि को लागू:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
     calloutAccessoryControlTapped:(UIControl *)control 
{ 
    NSLog(@"accessory button tapped for annotation %@", view.annotation); 
} 
संबंधित मुद्दे