Swift में Instantiate और Present ViewController: उदाहरणों और सामान्य प्रश्नों के उत्तरों के साथ पूर्ण विश्लेषण
\n\nनमस्ते, साथियों! यदि आपने कभी Swift में iOS ऐप में प्रोग्रामेटिक रूप से एक नई स्क्रीन बनाने और प्रदर्शित करने का कार्य किया है, तो आपने निश्चित रूप से ये प्रश्न पूछे होंगे: "Storyboard से ViewController को सही तरीके से कैसे बनाएं?", "दिखाने से पहले डेटा कैसे ट्रांसफर करें?" और "Segue और मैन्युअल Present में क्या अंतर है?"
\n\nयह विषय Stack Overflow पर सबसे लोकप्रिय विषयों में से एक है (हज़ारों व्यूज़!), और यह उचित भी है। पहली नज़र में सब कुछ सरल लगता है, लेकिन हमेशा की तरह, शैतान विवरण में छिपा होता है। आइए सभी बारीकियों को समझें, ताकि आप कभी instantiate viewController Swift और present viewController Swift में भ्रमित न हों।
\n\n1. मूल विधि: Storyboard से Instantiate
\n\nसबसे सामान्य परिदृश्य यह है कि आपके पास एक Storyboard है जिसमें एक कंट्रोलर है जिसे Storyboard ID असाइन किया गया है। इस पहचानकर्ता के बिना, आप प्रोग्रामेटिक रूप से कंट्रोलर का इंस्टेंस नहीं बना सकते।
\n\nचरण 1: Storyboard ID सेट करना
\nStoryboard खोलें, वांछित ViewController चुनें, Identity Inspector (पहचान पत्र आइकन) पर जाएं और Storyboard ID फ़ील्ड में एक अद्वितीय नाम दर्ज करें, जैसे DetailViewController। यह भी सुनिश्चित करें कि Use Storyboard ID चेकबॉक्स सक्रिय है।
चरण 2: instantiate और present के लिए कोड
\nअब अपने कोड में आवश्यक स्थान पर (उदाहरण के लिए, बटन दबाने पर) लिखें:
\n\nimport UIKit\n\nclass MainViewController: UIViewController {\n\n @IBAction func showDetailTapped(_ sender: UIButton) {\n // 1. Storyboard का संदर्भ प्राप्त करें\n let storyboard = UIStoryboard(name: "Main", bundle: nil)\n \n // 2. इसके Storyboard ID द्वारा कंट्रोलर का इंस्टेंस बनाएं\n guard let detailVC = storyboard.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController else {\n fatalError("ID DetailViewController वाला कंट्रोलर नहीं मिला")\n }\n \n // 3. कंट्रोलर को मोडली दिखाएं\n present(detailVC, animated: true, completion: nil)\n }\n}\n\nयह instantiate viewController Swift का एक क्लासिक उदाहरण है। guard let पर ध्यान दें - यह एक सुरक्षित निष्कर्षण है जो आपको गलत ID दर्ज होने पर ऐप क्रैश होने से बचाएगा।
2. Present बनाम Push: कब क्या उपयोग करें?
\n\nकई शुरुआती present (मोडल प्रदर्शन) और push (नेविगेशन स्टैक में धकेलना) में भ्रमित हो जाते हैं। आइए अंतर समझें।
\n\n- \n
- Present - यह एक मोडल प्रदर्शन है। कंट्रोलर नीचे से (या किसी अन्य एनिमेशन के साथ) प्रकट होता है और नेविगेशन स्टैक से जुड़ा नहीं होता है। इसका उपयोग अस्थायी स्क्रीन के लिए किया जाता है: लॉगिन, चेतावनियाँ, फॉर्म। \n
- Push - केवल UINavigationController के अंदर काम करता है। कंट्रोलर स्टैक में "धकेल" दिया जाता है, डिफ़ॉल्ट रूप से दाईं ओर से प्रकट होता है, और स्वचालित रूप से "वापस" बटन प्राप्त करता है। पदानुक्रमित स्क्रीन के लिए आदर्श: सूची -> विवरण। \n
Push के लिए, navigationController?.pushViewController(_:animated:) विधि का उपयोग करें।
// Push (UINavigationController की आवश्यकता है)\nif let navigationController = navigationController {\n navigationController.pushViewController(detailVC, animated: true)\n} else {\n present(detailVC, animated: true, completion: nil) // फ़ॉलबैक\n}\n\n3. Present से पहले डेटा ट्रांसफर
\n\nसबसे सामान्य प्रश्नों में से एक: "नए ViewController में डेटा कैसे ट्रांसफर करें, इससे पहले कि वह प्रकट हो?" उत्तर सरल है: present कॉल करने से पहले कंट्रोलर के गुणों या विधियों का उपयोग करें।
\n\nस्ट्रिंग ट्रांसफर का उदाहरण
\nमान लीजिए, DetailViewController में एक गुण है:
\n\nclass DetailViewController: UIViewController {\n var receivedMessage: String = ""\n \n ov