2013-02-11 21 views
8

मैं जब एक DetailDisclosure मानचित्र मैं प्रदर्शित कर रहा हूँ पर क्लिक किया जाता है दृश्य बदलने के लिए चाहते हैं दृश्य नियंत्रक के लिए पुश MKAnnotationView। मेरे वर्तमान कोड के रूप में नीचे है:जब DetailDesclosure बटन क्लिक

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailViewController *detailViewController = [[DetailViewController alloc] 
    initWithNibName:@"DetailViewController" bundle:nil]; 
    detailViewController.title = dictionary[@"placeLatitude"] 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
} 

मैं इस के साथ दृश्य नियंत्रक करने के लिए धक्का कर सकते हैं, लेकिन मैं समझ नहीं है कि कैसे पहले में नक्शा उत्पन्न करने के लिए इस्तेमाल किया JSON सारणी से विवरण खींचने के लिए मजबूर करने के लिए यह जगह। मैं नक्शा उत्पन्न करने के लिए इस तरह के डेटा खींच रहा हूं:

for (NSDictionary *dictionary in array) 
{ 
    // retrieve latitude and longitude from the dictionary entry 

    location.latitude = [dictionary[@"placeLatitude"] doubleValue]; 
    location.longitude = [dictionary[@"placeLongitude"] doubleValue]; 

    //CAN I LOAD THE TITLE/ID OF THE LOCATION HERE? 

मुझे पता है कि मैं थोड़ा सा लक्ष्य हूं। शायद सही दिशा में सिर्फ एक किक मदद कर सकता है। धन्यवाद!

उत्तर

11

आप स्टोरीबोर्ड का उपयोग कर और अपने गंतव्य दृश्य के लिए अपने वर्तमान दृश्य से एक segue है रहे हैं, तो आप सिर्फ calloutAccessoryControlTapped का जवाब कर सकते हैं। उदाहरण के लिए:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    [self performSegueWithIdentifier:@"Details" sender:view]; 
} 

जाहिर है, आप, आदि, कि view के साथ जुड़े यदि आप अलग अलग segues आप विभिन्न टिप्पणी प्रकार के लिए कॉल करने के लिए करना चाहते हैं एनोटेशन के प्रकार के लिए देख सकते हैं।

और, बेशक, अगर आप prepareForSegue सामान्य की तरह में है कि अगले दृश्य के लिए कोई भी जानकारी अग्रेषित करना चाहते हैं।

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Details"]) 
    { 
     MKAnnotationView *annotationView = sender; 
     [segue.destinationViewController setAnnotation:annotationView.annotation]; 
    } 
} 

आप देख सकते हैं, मैं अपने अगले दृश्य के लिए annotation वस्तु गुजरती हैं। आप अपने JSON संरचना है कि प्रत्येक एनोटेशन के साथ जुड़े रहे हैं में अतिरिक्त फ़ील्ड है, तो एक आसान उपाय क्षेत्रों आप ट्रैक करना चाहते से प्रत्येक के लिए जुड़े अपने कस्टम दृश्य पर गुण जोड़ने के लिए है। बस अपनी एनोटेशन कस्टम क्लास के लिए .h पर जाएं और आपको आवश्यक संपत्तियां जोड़ें। और फिर जब आप अपनी कस्टम एनोटेशन (मानचित्र में जोड़े जाने के लिए) बनाते हैं, तो बस इन गुणों को भी सेट करें। फिर, जब आप इस एनोटेशन को अगले दृश्य नियंत्रक को पास करते हैं, तो आपकी सभी वांछित संपत्तियां उपलब्ध होंगी।


जाहिर है, आप महत्वपूर्ण व्यक्ति उपयोग कर रहे हैं, बस निब समकक्ष जो कुछ भी आप अगले दृश्य नियंत्रक instantiating के लिए चाहते हैं, की स्थापना जो कुछ गुण आप चाहते हैं, और या तो यह करने के लिए जोर दे रहा है या यह रीति से पेश, जैसे कार्य करें:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil 
                       bundle:nil]; 
    controller.annotation = annotationView.annotation; 
    [self.navigationController pushViewController:controller animated:YES]; // or use presentViewController if you're using modals 
} 
+0

धन्यवाद रॉब, क्या मुझे सेग्यू रखने के लिए स्टोरीबोर्ड का उपयोग करने की आवश्यकता है? – Brandon

+0

के बीमार इसे देखो। हमेशा के रूप में - आप ROCK – Brandon

+0

तो मैं नए दृश्य पर फ़ील्ड का उपयोग कैसे करूं? मैं अपने ऐप में एक ही चीज़ को पूरा करने की कोशिश कर रहा हूं। –

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