2010-07-17 8 views
6

तो मुझे कोको का उपयोग करने का तरीका सीखना शुरू हो रहा है। मुझे लगता है कि मुझे काफी कुछ मिला है लेकिन मुझे विचार बनाने और स्विच करने पर लटका दिया गया है। मैं अभ्यास के लिए थोड़ा सा समय पहले एक गेम लिख रहा हूं। मैं चाहता हूं कि एक खिड़की (अधिमानतः आकार बदलने योग्य नहीं) और मैं गेम में विभिन्न स्क्रीन के लिए विचारों को बदलने में सक्षम होना चाहता हूं।मैं कोको एप्लिकेशन में दृश्य कैसे बदलूं?

सबसे पहले, मेरे पास मुख्य मेनू (स्टार्ट गेम, हाई स्कोर्स, एक्जिट) है। तो मुझे प्रत्येक स्क्रीन (गेमप्ले स्क्रीन, हाईस्कोर स्क्रीन) के लिए एक विंडो की आवश्यकता है।

जो मुझे उलझन में आ रहा है वह यह है कि इसे कैसे डिजाइन किया जाए। मैंने NSViewController को देखा कि यह विचारों का प्रबंधन करता है लेकिन यह नहीं करता है। यह वास्तव में इसे लोड करके केवल एक दृश्य का प्रबंधन करता है। मुझे समझ में नहीं आता कि मुझे NSViewController का उपयोग क्यों करना होगा। क्या मेरे पास सिर्फ एक विंडो क्लास नहीं है जिसमें NSView के एकाधिक उप-वर्ग शामिल हैं और उन्हें इस तरह लोड करें? मुझे यकीन नहीं है कि मैं ViewController के उद्देश्य को समझता हूं।

क्या मेरी विंडो क्लास को वास्तव में NSWindowController को उप-वर्ग करने की आवश्यकता है? मैं ऐप्पल के व्यू कंट्रोलर उदाहरण के उदाहरण का पालन करने की कोशिश कर रहा था और इसमें एक विंडो नियंत्रक वर्ग है जो NSWindowController का उप-वर्ग है। मैं नहीं देखता कि इसका उद्देश्य उप-वर्ग का उद्देश्य क्या था। सभी NSWindowController को - initWithPath:(NSString *)newPath जोड़ना प्रतीत होता है, लेकिन जब मैं स्टार्ट अप पर विंडो खोलने के लिए बस प्लेलिस्ट फ़ाइल को संपादित कर सकता हूं तो मैं उसमें उपयोग को देखने में विफल रहता हूं। ऐप्पल के उदाहरण में एनएसवी व्यू वैरिएबल और एनएसवी व्यूंट्रोलर वैरिएबल भी है। वर्तमान दृश्य को स्टोर करने के लिए आपको केवल एक चर की आवश्यकता नहीं है?

अग्रिम लोगों में धन्यवाद, मैं वास्तव में उलझन में हूं कि यह कैसे काम करता है।

उत्तर

1

निम्नलिखित का प्रयोग करें कार्यों UIVew

- (void)addSubview:(UIView *)view 
- (void)removeFromSuperview 
+0

मैं अभी डेस्कटॉप पर कोको कर रहा हूं। –

+2

डेस्कटॉप (NSView) –

+0

में उपलब्ध एक ही इंटरफ़ेस तो मैं क्या जानना चाहता हूं कि मुझे NSViewController का उपयोग क्यों करना चाहिए। क्या मैं? क्या मुझे NSVindowController का एक NScliew और NSViewController चर के साथ उप-वर्ग बनाना चाहिए? मुझे यकीन नहीं है कि स्विच करने योग्य विचारों के साथ खिड़की बनाने के लिए वास्तव में क्या आवश्यक है। मेरी समझ से, मुझे NSViewController की बिल्कुल आवश्यकता नहीं है, लेकिन मुझे नहीं पता कि ऐप्पल के उदाहरण ने इसका इस्तेमाल किया है और यह आपके लिए चीजों को आसान बनाना है। –

5

आप NSWindowController और NSViewController का उपयोग एक खिड़की या एक दृश्य के प्रबंधन करने के लिए है क्योंकि आप केवल NSWindow या NSView की उपवर्गों बनाने की आवश्यकता चाहिए (जो आपके मौजूदा खिड़की का हिस्सा है) में परिभाषित किया गया खिड़की या दृश्य के नए "प्रकार" के लिए। उदाहरण के लिए, यदि आप एक परिपत्र विंडो का उपयोग करना चाहते हैं, तो आप NSWindow उपclass करेंगे। यदि आप बस एक विंडो में नियंत्रण रखना चाहते हैं, तो आप NSWindowController उपclass।

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

इस बारे में सोचें: दृश्य ड्रा, और वे कच्चे इनपुट ईवेंट को उच्च-स्तरीय कार्रवाइयों में बदल देते हैं। नियंत्रक विचारों को जानकारी प्रदान करते हैं, और कार्यों को संभालते हैं।

इस तरह की चीजें लिखना आपके कोड की मॉड्यूलरिटी में काफी सुधार कर सकता है, जिससे इसे डिज़ाइन, लिखना और डीबग करना आसान हो जाता है।

+0

मुझे लगता है कि थोड़ा और समझ में आता है। क्या आपको लगता है कि मुझे दृश्य में लोड करने के लिए 'initWithNibName: बंडल:' का उपयोग करना होगा या क्या मैं दृश्य के "फ़ाइल के स्वामी" को ViewController पर सेट कर सकता हूं? –

+0

आपको दोनों को करने की ज़रूरत है। आप अपने NSViewController subclass को तुरंत चालू करने के लिए '-initWithNibName: बंडल:' का उपयोग करते हैं। वह निर्दिष्ट निब फ़ाइल लोड करता है और इसके फ़ाइल के स्वामी के रूप में कार्य करता है; निब के फ़ाइल के मालिक की कक्षा को अपने NSViewController subclass पर सेट करें, और अपने दृश्य पर फ़ाइल के स्वामी का "व्यू" आउटलेट इंगित करें। –

4

ऐसा लगता है कि आप एक विंडो के भीतर सामग्री दृश्य को स्वैप करने का प्रयास कर रहे हैं? यदि ऐसा है, तो आप -[NSView replaceSubview:with:] का उपयोग -[NSWindow contentView] रिसीवर के रूप में कर सकते हैं।

कहें कि आपके पास titleView नामक एक शीर्षक पृष्ठ है और menuView नामक एक मेनू पृष्ठ है और आप इन्हें अपने एप्लिकेशन की मुख्य विंडो में और बाहर स्वैप करना चाहते हैं।शीर्षक पृष्ठ दिखाई दे रहा है और उपयोगकर्ता एक "मुख्य मेनू" बटन या लिंक पर क्लिक करता है, तो आप बटन के प्रतिनिधि विधि में कुछ इस तरह रखा जाएगा:

[[[NSApp mainWindow] contentView] replaceSubview:titleView with:menuView]; 

दो बातें पता होनी चाहिए:

  1. इस मामले में पुराना दृश्य, titleView, इस कॉल द्वारा जारी किया गया है। यदि आप चाहते हैं कि यह अभी भी उपलब्ध हो, तो आपको इसे बदलने से पहले retain करना होगा।
  2. यदि आपके पृष्ठों के अलग-अलग आयाम हैं तो मूल दृश्य का आकार बदल नहीं जाएगा। विंडो के फ्रेम आकार को बदलना, और इसलिए contentView काफी आसान है, लेकिन आप इसे कुछ शैली देने के लिए मिश्रण में थोड़ा कोर एनीमेशन जोड़ सकते हैं।

मुझे उम्मीद है कि इससे मदद मिलती है!

+0

ठीक है, धन्यवाद! मैं उसमें भी देख लूंगा। आप लोग सभी वास्तव में सहायक हैं। –

0

मैं कोको में नया हूं लेकिन मुझे लगता है कि आपके ऐप को वास्तव में NSViewController की आवश्यकता नहीं है। एक NSViewController एमवीसी डिजाइन पैटर्न में "नियंत्रक" की भूमिका निभाता है। तो यह सभी कार्यों को नियंत्रित करता है - गोंद तर्क - एक ही दृश्य में।

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

आपके ऐप में, ऐसा लगता है जैसे प्रत्येक दृश्य एक साधारण पृष्ठ है जिसमें दृश्य स्तर नियंत्रण की आवश्यकता होती है। इसलिए, आपको संभवत: एक NSWindowController की आवश्यकता है, जो पेज से पृष्ठ में संक्रमण के लिए तर्क और घटनाओं को संभालने के लिए एक नियंत्रक है।

एक एकल विंडो भरने वाले एकाधिक विचारों को संभालने के लिए एक तकनीक एनएसटीएबी व्यू का उपयोग करना और आईबी में टैब शैली को 'सीमाहीन' पर सेट करना है। फिर आवश्यक NSTabViewItem का चयन करने के लिए बटन कार्रवाई का उपयोग करें। विकास के दौरान, टैबव्यू शैली को 'शीर्ष टैब' पर सेट करें और आईबी आपको उन सबव्यूज के माध्यम से टैब करने की अनुमति देता है जिन्हें आप प्रदर्शित करना चाहते हैं।

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

  • कोई संबंधित समस्या नहीं^_^