2012-01-28 9 views
57

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

  1. pushViewController का उपयोग कर:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"]; 
    [self.navigationController pushViewController:lvc animated:YES]; 
    
  2. Segue प्रोग्राम के रूप में प्रदर्शन:

    [self performSegueWithIdentifier: @"SongSegue" sender: self]; 
    

आप som है ई विकल्प पर संकेत देता है और इस ऑपरेशन को सर्वोत्तम तरीके से किया जाना चाहिए? ध्यान दें कि मैं मोडल विचारों का जिक्र नहीं कर रहा हूं।

+0

व्यक्तिगत रूप से, क्योंकि आप स्टोरीबोर्ड और सीग्यू का उपयोग कर रहे हैं, तो # 2 इसे करने का एक अच्छा तरीका है। –

+0

# 1 उपयोगी हो सकता है यदि आपको व्यू कंट्रोलर को धक्का देना है जिसमें सेगू नहीं हो सकता है? यानी मैपव्यू एनोटेशन के प्रकटीकरण बटन से व्यू कंट्रोलर को पुश करें। – kappa

+0

कुछ भी एक segue हो सकता है। सब कुछ एक * स्वचालित * segue पूरी तरह से आईबी (बटन और टेबल कोशिकाओं की तरह) में बनाया जा सकता है। लेकिन आप अभी भी एक दृश्य नियंत्रक से शुरू होने वाले आईबी में एक सेगू बना सकते हैं और इसे निष्पादित करने के लिए # 2 का उपयोग कर सकते हैं; मैप कॉलआउट बटन के लिए यह वही है जो आप करेंगे। – rickster

उत्तर

4

व्यक्तिगत रूप से, मैं # 2 का उपयोग जब मैं एक UIViewController है कि एक UINavigationController के तहत में हूँ। मुझे नहीं लगता कि यह काम करेगा, कोई UINavigationController नहीं है।

जब मैं एक दृश्य है कि एक UITabBarController के तहत उपयोग कर रहा हूँ, मैं किसी अन्य टैब पर संक्रमण के लिए निम्नलिखित कोड का उपयोग करें:

NSUInteger tabIndex = 2; // Index of the tab I want to select 
UIViewController * viewCtrl = [_tabController.viewControllers objectAtIndex:tabIndex]; 
_tabController.selectedViewController = viewCtrl; 
+2

'ऑब्जेक्ट नहीं होना चाहिए एंटीएन्डेक्स: 0'' ऑब्जेक्ट एट इंडेक्स: टैब इंडेक्स 'होना चाहिए? – Kevin

+0

@ केविन आप सही हैं। मैंने उदाहरण में संपादन किया था। – gfrigon

36

एप्पल performSegueWithIdentifier:sender:someObject उपयोग करने की सलाह प्रोग्राम के रूप में segues प्रदर्शन करने के लिए।

  • अपने खुद के कोड के कम मतलब है कि आप ढांचे दे रहे काम का अधिक है: वहाँ यह इस तरह से कर रही है के लिए लाभ का कम से कम एक जोड़े हैं। धक्का segues के लिए, या प्रदर्शन में सुधार, या भविष्य के किसी आईओएस रिलीज में एक बग ठीक करता है एप्पल कुछ सुपर शांत नए दृश्य प्रभाव के साथ आता है, अपने अनुप्रयोग मुक्त करने के लिए इसे प्राप्त कर सकते हैं। और कोड की हर पंक्ति जो आप लिखने के लिए लिखते हैं, वह आपके लिए काम कर सकती है, जिससे आप बग लिखने का मौका बढ़ा सकते हैं।

  • आईबी में अधिक परिवर्तन करना आसान हो सकता है। आप तय करते हैं कि आप बदलना चाहते हैं सब अपने पुश segues मोडल को segues, या कुछ कस्टम segue प्रकार जहाँ आप अपने सुपर शांत दृश्य प्रभाव करते हैं, आप उन्हें सभी आईबी में चयन और शिकार के बजाय एक क्लिक के साथ segue प्रकार बदल सकते हैं अपने कोड में चारों ओर।


इसके अलावा, कि क्या आप पहली या दूसरी विधि का उपयोग करें, क्रम में एक दृश्य नियंत्रक धक्का "वापस" एक पिछले दृश्य नियंत्रक करने के लिए जाने का रास्ता अपने उपयोगकर्ताओं को उम्मीद काम नहीं करेगा। जब आप एक SongViewController धक्का, यह नेविगेशन ढेर के अंत में जोड़ा है:

LocationViewController -> SongViewController 

आप तो LocationViewController धक्का फिर से "वापस" जाना तो: उपयोगकर्ता में वापस बटन टैप करता

LocationViewController -> SongViewController -> LocationViewController 

हैं नेविगेशन बार, वे फिर से स्थान दृश्य पर स्थान दृश्य से स्थान दृश्य पर वापस जाएंगे। (इसके अलावा, यदि आप ऐसा करते रहते हैं, तो प्रत्येक "बैक" और "फॉरवर्ड" दृश्य नियंत्रकों की एक सतत बढ़ती श्रृंखला में शामिल होगा, जो अन्य परेशानी का कारण बन सकता है।)

इसके बजाय, आपको नेविगेशन नियंत्रक हैंडल वापस जाना।यह उस उद्देश्य के लिए नेविगेशन बार में एक बटन डालता है, जो अधिकांश उपयोग मामलों को संभालना चाहिए। यदि आपको वापस जाने के लिए अपना नियंत्रण करने की आवश्यकता है, तो आप इसे आईओएस 5 के साथ आईबी में नहीं कर सकते हैं, लेकिन आप इसे नेविगेशन नियंत्रक के popViewControllerAnimated: विधि के साथ प्रोग्रामेटिक रूप से कर सकते हैं।

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