स्टोरीबोर्ड में मोडल और पुश सेग के बीच क्या अंतर है?


179

क्या कोई मुझे समझा सकता है कि अंतर modalऔर pushबहस के बीच सटीक अंतर क्या है ?

मुझे पता है कि जब हम pushसेग का उपयोग करते हैं तो स्टैक में जोड़ा जाता है, इसलिए जब हम pushइसका उपयोग करते हैं तो यह स्मृति को घेरे रहता है?

क्या कोई मुझे दिखा सकता है कि इन दोनों को कैसे लागू किया जाए?

Modalसेगमेंट बस द्वारा बनाया जा सकता है ctrl-clickऔर गंतव्य पर खींच सकता है, लेकिन जब मैं ऐसा करता हूं तो pushमेरे ऐप क्रैश हो जाते हैं।

मैं एक बटन से धक्का दे रहा हूं UINavigationControllerजिसमें ए है UIViewController

जवाबों:


174

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

एक मॉडल सेगमेंट सिर्फ एक वीसी होता है जो दूसरे वीसी को औपचारिक रूप से प्रस्तुत करता है। कुलपतियों को नेविगेशन नियंत्रक का हिस्सा नहीं होना पड़ता है और कुलपति को आम तौर पर प्रस्तुत किया जाता है जिसे आमतौर पर प्रस्तुतकर्ता (अभिभावक) कुलपति का "बच्चा" माना जाता है। आम तौर पर प्रस्तुत कुलपति आमतौर पर किसी भी नेविगेशन बार या टैब बार को सुरक्षित रखता है। प्रेजेंट वीसी इसे बनाए गए और पेश किए गए मोडल वीसी को खारिज करने के लिए भी जिम्मेदार है।

उम्मीद है की यह मदद करेगा।


1
@EJJay महान विवरण के लिए धन्यवाद। एक और सवाल जब मुझे मोडल का इस्तेमाल करना होता है और पुश सीग का इस्तेमाल कब करना है?
गौरव_सोनी २२'१२

43
आमतौर पर, जब आप सारांश दृश्य का एक विस्तृत दृश्य दिखाना चाहते हैं, तो एक नेविगेशन नियंत्रक और पुश सेगमेंट का उपयोग करें। यदि "माता-पिता" दृश्य वास्तव में संबंधित नहीं है जहां तक ​​डेटा "बच्चे" दृश्य से संबंधित है, तो एक मोडल का उपयोग करें। एक मोडल दृश्य के लिए एक अच्छा उदाहरण एक लॉगिन दृश्य होगा। लॉगिन दृश्य का वास्तव में कोई संबंध नहीं है जहां तक ​​डेटा "माता-पिता" दृश्य से संबंधित है।
एलजे विल्सन

5
@ टीजे हाँ, आप "मॉडल चेन" बना सकते हैं। एक वीसी को खारिज करने के बाद श्रृंखला नीचे सभी कुलपतियों को खारिज कर देती है - उपयोगकर्ता केवल शीर्ष वीसी को खारिज करता है (जब आप एनीमेशन सक्षम करते हैं)। यह नेविगेशन कंट्रोलर की तरह है।
कॉन्सटेंटिनो त्सौहास

3
@ जचतार्ड हाँ। जब तक आपका सेगमेंट मोडल है, स्टोरीबोर्ड में आप देखेंगे कि नेविगेशन बार विरासत में नहीं मिला है। तो बस आपके पास मौजूद मोडल चेन के पहले VC पर क्लिक करें और फिर मेनू एडिटर -> एंबेड इन -> नेविगेशन कंट्रोलर पर क्लिक करें। यह आपको एक नेविगेशन कंट्रोलर सेट करेगा जो आपके सभी मोडल चेन के लिए सामान्य होगा। ऐसा नहीं है कि उस समय केवल नेविगेशन कंट्रोलर प्रदर्शित करने के लिए सेगमेंट "मोडल" है, जबकि आपके अंदर के सभी सेगमेंट मोडल चेन "पुश" सेगमेंट होने चाहिए।
HpTerm

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

22

स्विफ्ट 3.0 और XCode 8.2.1 अपडेट

1. पुश तर्क

पुश सेग को शो सेग के रूप में नाम दिया गया है । पुश सेगमेंट बनाने के लिए, पैरेंट व्यू कंट्रोलर को नेविगेशन कंट्रोलर में एम्बेड करने की आवश्यकता होती है। नेविगेशन नियंत्रक नेविगेशन बार प्रदान करता है। एक बार जब आप पुश व्यू के साथ दो व्यू कंट्रोलर कनेक्ट करते हैं, तो चाइल्ड व्यू कंट्रोलर में स्वतः ही टॉप पर नेविगेशन बार होगा। नेविगेशन स्टैक के शीर्ष पर चाइल्ड व्यू कंट्रोलर जोड़ा जाएगा।

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

पुश सीग डिफ़ॉल्ट सुविधाएँ भी प्रदान करता है। चाइल्ड व्यू कंट्रोलर में एक बैक बटन होगा जो आपको पेरेंट व्यू कंट्रोलर के पास ले जाता है। आप चाइल्ड व्यू कंट्रोलर को पॉप करने के लिए राइट स्वाइप भी कर सकते हैं। पुश सीग्यू के लिए एनीमेशन क्षैतिज रूप से पृष्ठों को फिसलने जैसा है।

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

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

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

2. मोडल सेग

दूसरी ओर एक मोडल सेग (यानी वर्तमान में), वर्तमान दृश्य नियंत्रक पर प्रस्तुत कर रहा है। चाइल्ड व्यू कंट्रोलर नेविगेशन व्यू कंट्रोलर इनहेरिट नहीं करेगा इसलिए नेविगेशन बार तब खो जाएगा जब आप नेविगेशन कंट्रोलर के साथ व्यू कंट्रोलर से मोडल सेगमेंट पेश करेंगे। आपको फिर से नेविगेशन कंट्रोलर में चाइल्ड व्यू कंट्रोलर को एम्बेड करना होगा और यदि आप इसे वापस चाहते हैं तो एक नया नेविगेशन स्टैक शुरू करें। यदि आप मूल दृश्य नियंत्रक पर वापस जाना चाहते हैं, तो आपको इसे स्वयं लागू करना होगा और dismissकोड से कॉल करना होगा ।

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

मोडल सेग के लिए एनीमेशन यह है कि चाइल्ड व्यू कंट्रोलर पेज के नीचे से आएगा। इस डेमो में नेविगेशन व्यू कंट्रोलर भी चला गया है

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


6

धक्का दृश्य एक में बनाया जाना चाहिए navigationController

अपने पर क्लिक करें master view, फिर मेनू बार में चुनें:

EDITOR->embed in->navigationController

गलत, pushViewबिना भी बनाया जा सकता है navigationControllerऔर यह उत्तर अधूरा है!
दक्ष गरगस

1

यह स्टोरीबोर्ड के लिए कस्टम पुश और सेग तरीकों का उपयोग करके नियंत्रण को धक्का दे रहा है स्टोरी बोर्ड

और मोडल स्टोरीबोर्ड का उपयोग किए बिना विचारों के माध्यम से नेविगेट करने का तरीका है।


स्टोरीबोर्ड का उपयोग किए बिना मोडल सेग कैसे बनाएं?
jianpx

@jianpx: जब आप स्टोरीबोर्ड का उपयोग करते हैं तो आप केवल बहस कर सकते हैं। अन्यथा आप दृश्यों के बीच स्विच करने के लिए नेविगेशन नियंत्रक या PresentModalViewController का उपयोग कर सकते हैं।
पुष्करराज

@ पुष्पराज धन्यवाद। तो क्या आपका मतलब है कि कोड के आधार पर बहस बनाने का कोई तरीका नहीं है?
jianpx

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