2011-11-24 16 views
6

के साथ मोडल व्यू कंट्रोलर का सही तरीके से उपयोग कैसे करें मैं सोच रहा था कि दृश्य नियंत्रक को सामान्य रूप से रखने के लिए स्टोरीबोर्ड का सही तरीके से उपयोग कैसे करें। व्यक्तिगत रूप से मैं xibs के साथ काम करना पसंद करता हूं, लेकिन ऐसा लगता है कि स्टोरीबोर्ड लोकप्रियता प्राप्त कर रहा है और भविष्य में जाने का तरीका होगा।xcode 4.2 स्टोरीबोर्ड

जिस तरह से मैं सामान्य रूप से एक दृश्य नियंत्रक को सामान्य रूप से रखता हूं, वैसे ही होगा: मान लें कि हमारे पास ViewControllerA (संक्षिप्त के लिए ए) और ViewControllerB (संक्षिप्त के लिए बी) है। मैं आमतौर पर बीएच में एक प्रोटोकॉल डालता हूं जब बी को बर्खास्त करना चाहता है और प्रतिनिधि को id<theProtocol> delegate फ़ील्ड assign संपत्ति के रूप में जोड़ें। मान लिया जाये कि मैं एक में व्यस्त हूँ और मैं बी रीति से प्रस्तुत करना चाहते हैं, मैं लिखने होगा:

B* b = [[B alloc] initWithNibName:@"B" bundle:nil]; 
b.delegate = self; 
[self presentModalViewController:B animated:YES]; 

स्टोरीबोर्ड का उपयोग करना, मैं जानता हूँ कि यह ctrl-घसीट से द्वारा एक मॉडल रास्ते में एक अलग दृष्टिकोण नियंत्रक प्रस्तुत करना संभव है एक व्यू कंट्रोलर के लिए एक बटन और संक्रमण प्रकार के रूप में मोडल का चयन। मैं बस सोच रहा हूँ हालांकि; मैं नए व्यू कंट्रोलर के प्रतिनिधि को कहां सेट करूं? अपने मोडल व्यू कंट्रोलर को चीजें पास करने का सही अभ्यास क्या है? मैं वास्तव में पता नहीं क्या segues साथ पूरे सौदा है ...

उत्तर

5

इसके अनुसार thistutorial

पर एक नजर डालें, तो आप प्रतिनिधि इस प्रकार सेट करना चाहिए:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     UINavigationController *navigationController = 
      segue.destinationViewController; 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      [[navigationController viewControllers] 
       objectAtIndex:0]; 
     playerDetailsViewController.delegate = self; 
    } 
} 

कहाँ @ "एडप्लेयर" आपके 'मोडल' सेग्यू

+1

मैंने ट्यूटोरियल को देखा और जाहिर है कि मुझे आपके उत्तर पर संदेह करने में कोई फायदा नहीं है, लेकिन क्या आप इस बात से सहमत नहीं होंगे कि यह पहले से कहीं अधिक प्रचलित कोड है? यह ऐसा कुछ ऐसा करने की परेशानी जैसा लगता है जो वास्तव में पहले से आसान था ... – Warkst

+1

स्टोरीबोर्ड का उपयोग न करें अगर यह आपके लिए बदसूरत लगता है –

+1

यही कारण है कि मैं अब उनका उपयोग नहीं करता, मैं बस "डर" वे भविष्य में ऐसा करने का मुख्य तरीका बन जाएंगे। – Warkst

0

नेविगेशन नियंत्रक का उपयोग करने के बजाय आप सीधे ऑब्जेक्ट prepareForSegue में पारित कर सकते हैं। इसमें destinationViewController नामक एक संपत्ति है जो दृश्य नियंत्रक है जिसे तत्काल किया जा रहा है। मुझे लगता है कि बहुत साफ है। यह एक उदाहरण है।

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      (PlayerDetailsViewController *) segue.destinationViewController; 

     playerDetailsViewController.delegate = self; 
    } 
} 

IMO मुझे लगता है कि क्योंकि वे अपने आवेदन की एक खाका की तरह कार्य करते है कि स्टोरीबोर्ड महान हैं। इसके अलावा मुझे कभी भी निब्स पसंद नहीं आया है। = डी

+0

ओह रुको। पिछले जवाब ने ऐसा किया लेकिन उन्होंने गंतव्य दृश्य नियंत्रक को नेविगेशन व्यू कंट्रोलर को असाइन किया जो आपको करने की ज़रूरत नहीं है (मुझे यह भी पता नहीं है कि यह काम करता है ...)। –

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