StoryBoard ID क्या है और मैं इसका उपयोग कैसे कर सकता हूं?


110

मैं IOS के विकास के लिए नया हूं और हाल ही में Xcode 4.5 में शुरू हुआ। मैंने हर व्यू-कंट्रोलर के लिए देखा कि मैं स्टोरीबोर्ड आईडी सहित कुछ पहचान चर सेट कर सकता हूं। यह क्या है और मैं इसका उपयोग कैसे कर सकता हूं?

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

मैंने स्टैकओवरफ्लो पर खोज शुरू की और इसके लिए कोई स्पष्टीकरण नहीं मिला। मुझे लगता है कि यह सिर्फ कुछ बेवकूफ लेबल नहीं है जिसे मैं अपने नियंत्रक को सही याद रखने के लिए सेट कर सकता हूं? यह क्या करता है?

जवाबों:


132

स्टोरीबोर्ड आईडी एक स्ट्रिंग फ़ील्ड है जिसका उपयोग आप उस स्टोरीबोर्ड ViewController के आधार पर एक नया ViewController बनाने के लिए कर सकते हैं। एक उदाहरण का उपयोग किसी भी ViewController से होगा:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

यह स्टोरीबोर्ड ViewController के आधार पर एक MyCustomViewController बनाएगा जिसे आपने "MyViewController" नाम दिया है और इसे अपने वर्तमान दृश्य नियंत्रक के ऊपर प्रस्तुत करें

और अगर आप अपने ऐप के प्रतिनिधि हैं तो आप उपयोग कर सकते हैं

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

संपादित करें: स्विफ्ट

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

स्विफ्ट के लिए संपादित करें> = 3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

तथा

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

आइए कोशिश करते हैं, और आपको कैसे मिलता हैself.storyboard
RTB

self.storyboard को किसी भी व्यू-कंट्रोलर से एक्सेस किया जा सकता है। मैं अपने उत्तर को अब संपादित करूँगा ताकि आप देख सकें
एरिक

और क्या होगा अगर इसे मेरे ऐपडेलगेट या किसी अन्य वर्ग से एक्सेस करने की आवश्यकता है?
आरटीबी

किसी अन्य फ़ाइल से स्टोरीबोर्ड तक पहुंचने का तरीका दिखाते हुए एक और संपादन जोड़ा गया।
एरिक

1
self.storyboardस्टोरीबोर्ड से लोड किए गए किसी भी दृश्य नियंत्रक से पहुँचा जा सकता है। यदि व्यू कंट्रोलर स्टोरीबोर्ड से लोड नहीं किया गया था, तो वह संपत्ति शून्य है।
बजे लूट

13

एरिक के जवाब में जोड़ने के लिए और इसे Xcode 8 और स्विफ्ट 3 के लिए अपडेट करें:

एक स्टोरीबोर्ड आईडी ठीक वही करता है जो नाम का अर्थ है: यह पहचानता है। बस यह है कि पहचान करता है एक दृश्य नियंत्रक एक स्टोरीबोर्ड फ़ाइल में। यह है कि स्टोरीबोर्ड को पता है कि कौन सा दृश्य नियंत्रक है।

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

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

आप उस व्यू कंट्रोलर को इंस्टेंट और वापस करने के लिए एक व्यू कंट्रोलर की स्टोरीबोर्ड आईडी का उपयोग कर सकते हैं। आप तब हेरफेर करने के लिए आगे बढ़ सकते हैं और इसे प्रस्तुत कर सकते हैं, हालांकि आप चाहते हैं। एरिक के उदाहरण का उपयोग करने के लिए, मान लें कि आप पहचानकर्ता 'MyViewController' के साथ एक व्यू कंट्रोलर प्रस्तुत करना चाहते हैं जब एक बटन दबाया जाता है, तो आप इसे इस तरह से करेंगे:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

कृपया सिंटैक्स में परिवर्तनों पर ध्यान दें।


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

मैं स्टोरीबोर्ड आईडी फ़ील्ड ढूंढने में असमर्थ था, इसलिए तस्वीर के लिए धन्यवाद। यह Xcode 9. पर इसी स्थिति में है
इसहाक बोस्का
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.