दूसरे स्टोरीबोर्ड पर बहस करें?


133

क्या एक स्टोरीबोर्ड से दूसरे में बहस करना या स्टोरीबोर्ड को दूसरे स्टोरीबोर्ड में व्यू कंट्रोलर में एम्बेड करना संभव है? मैं एक जगह की जरूरत है UITabBarControllerएक में UINavigationController, और मैं उन्हें अच्छा रखने के लिए और अलग करने के लिए करना चाहते हैं।


1
इस उत्तर को देखें stackoverflow.com/a/19702425/317928
vokilam

5
बड़ा सवाल है। एक स्टोरीबोर्ड होना टीम आधारित परियोजनाओं के लिए एक बुरा सपना है। हम नियमित रूप से स्टोरीबोर्ड में प्रोजेक्ट्स को "फ्लो" (लॉगिन के लिए एक स्टोरीबोर्ड, न्यूज फीड के लिए एक स्टोरीबोर्ड और संबंधित स्क्रीन आदि) से तोड़ते हैं। यह मर्ज संघर्षों की संख्या को कम करने में मदद करता है, जो अन्यथा हर बार होता है जब कोई डेवलपर स्टोरीबोर्ड को छूता है।
ब्रायन सचेटा

@BrianSachetta आप और क्या करते हैं? साझा करने के लिए कोई अन्य अच्छा समान सुझाव?
शहद

यह आपकी टीम संरचना पर निर्भर करता है। यदि आप वास्तव में चाहते हैं, तो आप अपने सभी उपयोगकर्ता इंटरफ़ेस को अलग-अलग .xib फ़ाइलों में रख सकते हैं। स्टोरीबोर्ड्स के अस्तित्व में आने से पहले यह ऐसा था। इस दृष्टिकोण के लिए उपद्रव और minuses हैं। उल्टा यह है कि आप लगभग कभी भी परियोजना के अन्य डेवलपर्स के साथ संघर्ष नहीं करेंगे। नकारात्मक पक्ष यह है कि ऐप के प्रवाह को नेत्रहीन रूप से देखना मुश्किल हो सकता है।
ब्रायन सचेटा

जवाबों:


201

हां, लेकिन आपको इसे प्रोग्रामेटिक रूप से करना होगा:

// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];

// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**  
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];

// Then push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];

11
मैं सिर्फ स्टोरीबोर्ड को अलग रखना चाहता हूं; वे पहले से ही बहुत ज्यादा बरबाद हो चुके हैं।
Ry-

11
किसी पुस्तक में अध्याय की तरह, मुझे कई स्टोरीबोर्ड की आवश्यकता है।
फाइनेंशियलहैप

48
जब आपके पास एक ही एप्लिकेशन पर कई डेवलपर्स काम करते हैं, तो कई स्टोरीबोर्ड्स होना बहुत उपयोगी हो जाता है क्योंकि स्टोरीबोर्ड xml में संस्करण नियंत्रण संघर्षों को हल करना कई बार काफी दर्दनाक होता है।
ली

14
IOS 9 और Xcode 7 में, क्रॉस-स्टोरीबोर्ड संदर्भ अब समर्थित हैं। :-)
क्विन टेलर

1
मिल्की का जवाब देखें, आप ऐसा अब यूआई में बहुत आसानी से कर सकते हैं!
टिम

117

Xcode 7 के बाद से, आप स्टोरीबोर्ड संदर्भ का उपयोग करके इसे ग्राफिक रूप से कर सकते हैं:

संदर्भ

अपने स्टोरीबोर्ड में स्टोरीबोर्ड संदर्भ जोड़ें। ViewController और स्टोरीबोर्ड संदर्भ (ctrl + drag) के बीच सेगमेंट बनाएं

फिर इस फ़ील्ड को भरें।

यहाँ छवि विवरण दर्ज करें

जहां "ट्यूटोरियल" "Tutorial.storyboard" फ़ाइल है और "MainTutorialController" ViewControllerSettings में "स्टोरीबोर्ड आईडी" फ़ील्ड है


1
अच्छी जानकारी, हालांकि प्रश्न ios5 को टैग किया गया है इसलिए यह लागू नहीं होता है।
lnafziger 4

10
@ इनाफिज़गर हाँ, लेकिन यह सवाल iOS 9 का उपयोग करने वाले लोगों के लिए खोज परिणामों में सबसे ऊपर दिखाई देता है
ब्रायन ओग्डेन

यह XCode 7 के बाद से उपलब्ध है। पर अधिक जानकारी देखें stackoverflow.com/questions/30772145/...
साइमन पिक

यह काम किया है, लेकिन मुझे नेविगेशन बार रखने की भी आवश्यकता है, यह नेविगेशन बार के बिना दिखा रहा है, क्या इतिहास पर वापस जाने के लिए नेविगेशन और बटन रखने का कोई तरीका है, इससे कोई फर्क नहीं पड़ता कि यह किस स्टोरीबोर्ड से आता है?
गिल बिय्रूट

यह मेरे लिए iOS 10 में काम कर रहा है। मैंने ध्यान दिया कि मुझे प्रति सेगमेंट में एक स्टोरीबोर्ड संदर्भ की आवश्यकता है और कई सेगमेंट को एक संदर्भ बिंदु से कनेक्ट नहीं किया जा सकता है।
मार्क रीड

10

आप वास्तव में मैन्युअल रूप से बहस नहीं कर सकते क्योंकि UIStoryboardSegue एक सार वर्ग है। आपको performकुछ भी करने के लिए इसे उप- क्रमबद्ध करने और लागू करने की आवश्यकता है। वे वास्तव में स्टोरीबोर्ड में बनने के लिए हैं। आप व्यू कंट्रोलर को मैन्युअल रूप से पुश कर सकते हैं, हालांकि, जो एक अच्छा समाधान है। lnafziger का जवाब यह अच्छी तरह से करता है:

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];

एक बात पर ध्यान दें, हालांकि, आपने कहा है कि आप चीजों को अच्छा और अलग रखना चाहते हैं। स्टोरीबोर्ड का विचार आपको अपने सभी डिज़ाइन के काम को एक जगह पर करते हुए चीजों को अलग रखने की अनुमति देना है। प्रत्येक दृश्य नियंत्रक अच्छा है और स्टोरीबोर्ड में दूसरों से अलग है। संपूर्ण विचार यह है कि यह सब एक जगह पर रखा जाए। बस इसे अच्छी तरह से बाहर रखें ताकि यह व्यवस्थित हो, और आप जाने के लिए अच्छा होगा। आपको इसे अलग नहीं करना चाहिए जब तक कि आपके पास ऐसा करने के लिए वास्तव में अच्छा कारण न हो।


6
स्टोरीबोर्ड को मर्ज करना बहुत अच्छी तरह से काम नहीं करता है, इसलिए एक बहु-डेवलपर-पर्यावरण-लेखन में, अलग स्टोरीबोर्ड का उपयोग करना दिलचस्प हो सकता है। इसके अलावा एकल स्टोरीबोर्ड के साथ बड़ी परियोजनाओं में प्रदर्शन बहुत खराब हो सकता है।
कैलिमार्कस

1
हम कई स्टोरीबोर्ड का उपयोग करते हैं, लेकिन मुद्दा यह है कि आप वास्तव में ऐसा नहीं कर सकते हैं और उनके बीच बहस कर सकते हैं। Apple ने इसे डिज़ाइन किया था ताकि आप एक ही जगह पर सब कुछ कर सकें, इसलिए यह विचार सिर्फ एक का उपयोग करने के लिए है (ऐसा नहीं है कि आप नहीं कर सकते हैं)। प्रदर्शन एक मुद्दा नहीं होना चाहिए। प्रत्येक दृश्य नियंत्रक के लिए स्टोरीबोर्ड को अलग-अलग निब फ़ाइलों में संकलित किया जाता है। आपको स्टोरीबोर्ड से बहुत अच्छा प्रदर्शन मिलना चाहिए। प्रदर्शन उतना ही अच्छा होगा जितना कि आपके पास प्रत्येक दृश्य नियंत्रक के लिए अलग-अलग xibs होंगे।
wbyoung

3
मेरे मामले में, प्रदर्शन समस्या आमतौर पर Xcode में है ... स्टोरीबोर्ड संपादक का Apple का वर्तमान कार्यान्वयन कमजोर है।
एडम

1
2014 के मैक प्रो पर 60-दृश्य वाली स्टोरीबोर्ड को खोलने में 13 सेकंड लगते हैं। मैंने राडार दायर किया है।
रॉबर्ट एटकिन्स

7

आपको UITabBarControllers को UINavigationController में नहीं रखना चाहिए। यह बग जैसे गलत ऑटोरोटेशन / दृश्य उतारने आदि के लिए पूछ रहा है, क्योंकि Apple इस प्रकार के नियंत्रण का समर्थन नहीं करता है :

हालांकि, नियंत्रकों के संयोजन को देखते हुए, रोकथाम का क्रम महत्वपूर्ण है; केवल कुछ व्यवस्थाएँ ही मान्य हैं। बच्चे से लेकर माता-पिता तक, इस प्रकार है:

  • कंटेंट व्यू कंट्रोलर, और कन्टेनर व्यू कंट्रोलर जिनमें लचीली सीमाएँ होती हैं (जैसे पेज व्यू कंट्रोलर)
  • नेविगेशन दृश्य नियंत्रक
  • टैब बार नियंत्रक
  • स्प्लिट व्यू कंट्रोलर

1
मैं पूरी तरह से सहमत हूं, और कई कारणों से। नैविगेशनकंट्रोलर के अंदर एक TabBarController को रखना एक अच्छा विचार नहीं है, क्योंकि प्रतिनिधि अपने अंदर मौजूद विचारों के लिए सही तरीके से फायर नहीं करेंगे, और अंत उपयोगकर्ता के पास इंटरफ़ेस नेविगेट करने में एक भयानक समय होगा। उन्हें तब नियंत्रक के लिए एक कठिन समय मिल जाएगा जो टैबबार / नेविगेशन इंटरफ़ेस से बाहर होता है। आसपास का दूसरा तरीका है, ओके, ए नेविगेशनकंट्रोलर एक टैब्बरकंट्रोलर के अंदर। यह हमेशा सबसे अच्छा है कि अंतिम उपयोगकर्ता को भ्रमित न करें और सेब के सुझावों को सुनें!
ह्यूबर्ट कुनेमेयेर

1
और फिर भी देशी आईफोन म्यूजिक ऐप बिल्कुल ऐसा ही करता है ("नाउ प्लेइंग" पार्ट)।
एनजो ट्रान

FYI करें: iPhone म्यूजिक ऐप में "Now play" स्क्रीन में TabbarController नहीं है।
संजना

4

यहाँ एक तेज संस्करण है:

let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
    self.navigationController?.pushViewController(targetViewController, animated: true)
}

-1

क्या आपने निम्नलिखित कोशिश की:

2 / अपने व्यू कंट्रोलर को चुनने के लिए क्लिक करें जो आपके नेविगेशन कंट्रोलर और टॉप मेनू से जुड़ा हुआ है: संपादक -> एम्बेड - इन> टैब बार कंट्रोलर

नोट: मैंने इसका परीक्षण नहीं किया क्योंकि मैं इसके विपरीत उपयोग कर रहा हूं: टैब्ड बार एप्लिकेशन बनाना और नेविगेशन नियंत्रक को अंदर रखना)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.