2013-04-07 21 views
6

मुझे बस एहसास हुआ कि निम्न कोड हमेशा एक नया टैग FeedViewController बनाता है। क्या यह segues का डिफ़ॉल्ट व्यवहार है? क्या हर बार नया गंतव्यव्यू कंट्रोलर नहीं बनाने के लिए आईओएस को कॉन्फ़िगर करने का कोई तरीका है?readyForSegue ** हमेशा ** एक नया गंतव्यViewController बनाता है?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"showSearchResult"]) { 
     TagsFeedViewController *destViewController = segue.destinationViewController; 
     destViewController.query = query; 
    } 
} 
+1

हाँ अनजान सेगमेंट को छोड़कर सभी सीग्यू व्यू कंट्रोलर बनाते हैं - लेकिन दृश्य नियंत्रक बनाने के लिए, यदि आप segues का उपयोग कर रहे हैं तो आप क्या कर रहे हैं? –

उत्तर

1

हाँ, यह segues के लिए डिफ़ॉल्ट व्यवहार है। अधिक जानकारी के लिए यह post देखें।

+0

लिंक अब मान्य नहीं है – CupawnTae

17

segues का उपयोग जो भी दृश्य नियंत्रकों उनके – initWithIdentifier:source:destination: तरीकों को प्रदान की जाती हैं। यह सीगू नहीं है जो गंतव्य दृश्य नियंत्रक बनाता है, लेकिन स्टोरीबोर्ड। the docs से:

आम तौर पर, एक स्टोरीबोर्ड में दृश्य नियंत्रकों instantiated कर रहे हैं और स्टोरीबोर्ड के भीतर ही निर्धारित कार्यवाहियों के जवाब में स्वचालित रूप से बनाया।

  • उपवर्ग UIStoryboard:

तो तुम कुछ विकल्प हैं। शायद एक बुरा विचार। UIStoryboard के लिए सार्वजनिक इंटरफ़ेस में केवल तीन विधियां हैं; "स्टोरीबोर्ड के भीतर परिभाषित क्रियाएं" सार्वजनिक नहीं हैं, और मुझे नहीं लगता कि आपको नौकरी सही करने के लिए पर्याप्त जानकारी उपलब्ध है।

  • अपने गंतव्य दृश्य नियंत्रक एक सिंगलटन करें। भी एक बुरा विचार है। general badness that singletons bring with them के अलावा, आपको एक व्यू कंट्रोलर रखने की आवश्यकता नहीं है जिसमें कोई दृश्य नहीं है और कोई भी बच्चे दृश्य नियंत्रक नहीं है। और अपने व्यू कंट्रोलर क्लास को एक सिंगलटन बनाने के लिए बस अपने दृश्य नियंत्रक वर्ग के एक विशेष उदाहरण का उपयोग करने में यूआईएसटीरीबोर्ड को बेवकूफ बनाने के लिए थोड़े icky लगता है।

  • उपवर्ग UIStoryboardSegue। आप अपने खुद के segues बनाने हैं, तो आप क्या आप – initWithIdentifier:source:destination: में चाहते हैं, बशर्ते गंतव्य दृश्य नियंत्रक अनदेखी और एक आप के बजाय चाहते का उपयोग भी शामिल कर सकते हैं। यह अभी भी ढांचे के खिलाफ काम करने जैसा लगता है, और यह आमतौर पर एक खराब योजना है, लेकिन यदि आपको पूरी तरह से अपने गंतव्य दृश्य नियंत्रक के एक विशेष उदाहरण का उपयोग करना चाहिए तो यह जाने का एक बेहतर तरीका है।

  • प्रवाह के साथ जाओ। बेस्ट विकल्प। इस कारण के बारे में सोचें कि आप मौजूदा व्यू कंट्रोलर को सीगू करने की उम्मीद कर रहे हैं। इस बात पर विचार करें कि ढांचे को तोड़ने के बिना आप जो चाहते हैं उसे पूरा करने के बेहतर तरीके हो सकते हैं। उदाहरण के लिए, क्या आप मौजूदा व्यू कंट्रोलर का उपयोग करना चाहते हैं क्योंकि इसमें पहले से ही कुछ विशेष स्थिति है? शायद यह आपके मॉडल में उस स्थिति को बनाए रखना बेहतर होगा और दृश्य नियंत्रक में नहीं।

  • 0

    आप shouldPerformSegueWithIdentifier:sender: संदेश को संभालने से नियंत्रक के निर्माण को रोक सकते हैं।

    -(BOOL) shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
    { 
        if ([identifier isEqualToString:@"showSearchResult"]) { 
         return [self.results count] > 0; 
        } 
        return YES; 
    } 
    
    +1

    ऐसा लगता है कि सेग्यू को निष्पादित होने से रोककर नियंत्रक के निर्माण को रोकता है। मुझे नहीं लगता कि ओपी पूरा करने की कोशिश कर रहा था। – Caleb

    +0

    @ कैलेब मैंने प्रश्न को गलत समझा होगा लेकिन मुझे नियंत्रक के बिना एक सेग्यू निष्पादित करने का कोई कारण नहीं दिखता है (जब तक कि यह निश्चित रूप से अनजान न हो) – Tassos

    +1

    मुझे लगता है कि ओपी एक नया निर्माण करने के बजाय मौजूदा दृश्य नियंत्रक को प्रस्तुत करने के लिए एक सेग्यू का उपयोग करना चाहता है हर बार एक। – Caleb

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