2008-10-21 17 views
12

मेरे पास एक ऐसा एप्लिकेशन है जो कई एनएस दस्तावेज़ों को खोलने की अनुमति देता है। इस एप्लिकेशन में एक एकल उपयोगिता विंडो है जिसमें कुछ कार्यक्षमता है जो मैं सामने के दस्तावेज़ पर लागू करना चाहता हूं।साझा उपयोगिता विंडो और सामने की दस्तावेज़ विंडो से बांधने का एक अच्छा तरीका क्या है?

मैं यहां बाइंडिंग का उपयोग करने की कोशिश कर रहा हूं, इसलिए यह चाल है कि उपयोगिता विंडो के उपयोगकर्ता इंटरफ़ेस को सबसे ऊपर दस्तावेज़ में साफ-सफाई कैसे करें। लक्ष्य यह है कि फिर सबसे आगे की दस्तावेज़ विंडो स्विच करने से उपयोगिता विंडो में दृश्य अपडेट हो जाएगा; नियंत्रण जो दस्तावेज़ के मॉडल में राज्य में परिवर्तन के समय उचित रूप से अपडेट किए जाएंगे,

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

कुछ विचारों मेरे पास है:

  • साझा खिड़की के लिए मेरे निब में एक वस्तु नियंत्रक डाल दिया। जब कोई दस्तावेज़ विंडो सामने की स्थिति बदलती है, तो उस बाध्यकारी की सामग्री को बदलें। इसका एक नुकसान यह है कि अगर मेरे पास एक और प्रकार की उपयोगिता खिड़की थी, तो मुझे दस्तावेज़ विंडो से बाइंडिंग को उस यूटिलिटी विंडो में भी जोड़ना होगा!
  • एप्लिकेशन प्रतिनिधि में एक एक्सेसर बनाएं जो विंडो सूची को घुमाने के द्वारा सबसे बड़ी दस्तावेज़ विंडो प्राप्त करता है। मेरी यूटिलिटी विंडो सिर्फ एप्लिकेशन प्रतिनिधि की विधि से जुड़ी होगी। यहां एक नुकसान यह है कि यह केवीओ अनुपालन नहीं है
  • आवेदन प्रतिनिधि में एक गेटटर और सेटर निर्धारित करने के लिए (और शायद केवीओ-अनुरूप होने के लिए सेट किया गया है? क्या यह समझ में आता है?) सामने वाला दस्तावेज़। विंडो विंडो अधिसूचनाओं का उपयोग करें जब एक विंडो मुख्य स्थिति खो देता है तो उचित मूल्य पर एक ivar सेट करें। अपडेट: मैं अभी इसका उपयोग कर रहा हूं, और यह वास्तव में बहुत साफ दिखता है। मैंने विंडोडिडब्यूमेनमेन से मेरी डॉक विंडो की अधिसूचना को सेट किया है और इसे विंडो विल्लक्लोस में साफ़ करें (यदि यह वर्तमान मान है)। जब तक कोई बड़ी आपत्ति नहीं होती है, तो शायद यह वह दृष्टिकोण है जिसका मैं उपयोग करूंगा।
  • One idea mainWindow.windowController.document से जुड़ना था ... यह करीब आता है, सिवाय इसके कि जब मेरी साझा विंडो मुख्य हो जाती है, तो यह बाध्यकारी दूर हो जाता है। तो वास्तव में मुझे सबसे आगे दस्तावेज़ विंडो के नियंत्रक (और दाएं वर्ग के) को खोजने की आवश्यकता है।

इनमें से कोई भी बिल्कुल सही नहीं लगता है। क्या ऐसा करने का कोई बेहतर तरीका है कि मुझे याद आ रही है?

उत्तर

4

मैं हमेशा साझा अनुप्रयोग, mainWindow.document से जुड़ा हुआ हूं, जो ठीक काम करता है। यदि आपके पास विंडोज़ w/o दस्तावेज़ हैं, तो आप mainYourKindOfWindow कुंजी जोड़ना चाहेंगे जो mainWindow देखकर लागू किया गया है और कुछ फ़िल्टर मानदंडों के आधार पर मान अपडेट कर रहा है।

+0

समस्या यह है कि जब उपयोगिता विंडो मुख्य होती है। मैं उपयोगिता खिड़की के नीचे सबसे बड़ी दस्तावेज़ विंडो चाहता हूँ। – danwood

+0

उस स्थिति में, आप इसका उपयोग नहीं कर सकते हैं या पीटर के सुझाव - [NSDocumentController currentDocument] को देखने का सुझाव नहीं दे सकते। अपने ऐप की मुख्य विंडो का निरीक्षण करें और कुछ यूएसपीप्लिकेशन प्रॉपर्टी सेट करें, उस मामले को छोड़कर जहां आपकी यूटिलिटी विंडो सामने आती है। –

+1

कहा जा रहा है, क्या कोई कारण है कि आप यहां एनएसपीनल का उपयोग नहीं करते हैं? –

0
  • साझा खिड़की के लिए मेरे निब में एक वस्तु नियंत्रक डाल दिया। जब कोई दस्तावेज़ विंडो सामने की स्थिति बदलती है, तो उस बाध्यकारी की सामग्री को बदलें।

यह मुझे सबसे ज्यादा समझ में आता है। आप सामग्री को दस्तावेज़ उदाहरण में बदल देंगे ([NSDocumentController currentDocument])।

इसका एक नुकसान यह है कि अगर मेरे पास एक और प्रकार की उपयोगिता खिड़की थी, तो मुझे दस्तावेज़ विंडो से बाइंडिंग को उस यूटिलिटी विंडो में भी जोड़ना होगा!

हुह? मुझे यह समझ में नहीं आता है।

+0

स्पष्टीकरण के लिए: यदि मैंने * एक और * साझा विंडो जोड़ा, जिसकी मैं काम कर रहा हूं, तो मुझे उस नई विंडो में दस्तावेज़ में एक और बाध्यकारी सेट अप करने की आवश्यकता होगी। यह जटिलता की एक परत जोड़ने लगता है। – danwood

+0

आपको दस्तावेज़ में उपयोगिता विंडो में बाध्यकारी क्यों चाहिए? दस्तावेज़ के लिए उपयोगिता विंडो से बात करने की क्या ज़रूरत है? –

3

तेंदुए का टेक्स्ट एडिट इसके निरीक्षक के लिए करता है। फ़ाइल में इसे देखें: /// डेवलपर/उदाहरण/ऐपकिट/टेक्स्ट एडिट।

0

तेंदुए का टेक्स्ट एडिट इसके निरीक्षक के लिए करता है। इसे फ़ाइल में देखें: /// डेवलपर/उदाहरण/ऐपकिट/टेक्स्ट एडिट।

टेक्स्ट एडिट में, इंस्पेक्टर मान मध्यवर्ती ऑब्जेक्ट नियंत्रक के माध्यम से बंधे होते हैं। नियंत्रक सामग्री ऑब्जेक्ट साझा अनुप्रयोग mainWindow से जुड़ा हुआ है।

आप सामग्री को मुख्य Window.firstResponder पर बाध्य कर सकते हैं और "लागू कुंजी के लिए उठाता है" अनचेक करें।

0

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

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