2011-02-15 18 views
13

पर एक कस्टम दृश्य जोड़ना मैं सफलता के बिना 2 घंटे के लिए कोको के साथ संघर्ष कर रहा हूं। मैं टूलबार में कस्टम व्यू जोड़ना चाहता हूं। इसलिए, मैंने खिड़की (आईबी के साथ) में एक एनएसटीूलबार जोड़ा, और मेरा दृश्य जोड़ा (जो पूरी तरह से काम करता है)। आईबी ने स्वचालित रूप से एक NSToolbarItem बनाया। मैंने ऐप्पल से दिए गए निर्देशों का पालन किया: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Toolbars/Tasks/AddRemoveToolbarItems.html#//apple_ref/doc/uid/20000755-BBCGJCDJटूलबार

समस्या यह है कि मुझे नहीं पता कि अब क्या करना है, दृश्य दिखाई नहीं देता है हालांकि यह लेबल विंडो में प्रदर्शित होता है।

यहाँ कोड मैं आकर्षित करने के लिए उपयोग करते हैं (बहुत ही सरल है, यह परीक्षण के लिए है) है

- (void)drawRect:(NSRect)dirtyRect { 
    [[NSColor blackColor] set]; 
    [[NSBezierPath bezierPathWithRect:self.bounds] fill]; 
} 

कोई मेरी मदद कर सकते हैं?

अग्रिम धन्यवाद।

+0

आपको शायद उस कोड को पोस्ट करने की आवश्यकता होगी जिसका उपयोग आप व्यू बनाने और बनाए रखने के लिए कर रहे हैं। प्रलेखन में कोड मेरे लिए काम करता है जब इसे प्रतिलिपि/चिपकाया जाता है और इसे कुछ साल पहले अपने ऐप के लिए अनुकूलित किया जाता है, इसलिए जब तक आप इसे 100% का उपयोग नहीं कर रहे हैं, तो यह आपके कस्टम कोड के साथ एक समस्या है। :-) –

+0

मैंने अपनी पोस्ट अपडेट की। मुझे लगता है कि आईबी का उपयोग करने के बाद से लिखने के लिए और कुछ नहीं है। क्या मैं सही हू ? –

उत्तर

19

मैंने समस्या हल की।

मैंने अपने कस्टम दृश्य को निब की जड़ में रखा है। मैंने एक क्लासिक NSToolbarItem जोड़ा और दो आउटलेट बनाए: एक कस्टम व्यू के लिए और एक NSToolbarItem के लिए। -(void)awakeFromNib पर, मैंने कस्टम दृश्य के साथ NSToolbarItem पर setView: कहा।

इंटरनेट पर कुछ संसाधनों के मुताबिक, यह इंटरफेस बिल्डर के साथ एक बग है।

+0

धन्यवाद, वास्तव में एक्सकोड में कुछ प्रकार की बग है, और यह संस्करण 4.2 में अभी भी एक मुद्दा है। – charles

+4

जब आप आईबी में किसी टूलबार में NSView खींचते हैं तो यह स्वचालित रूप से एक NSToolbarItem होल्डिंग बनाता है, जो आपके पास पहले से ही एक NSToolbarItem था जिसे आप प्रोग्राम करने के लिए एनएसटीूलबारइटम पर सेट व्यू को कॉल करने के लिए चाहते थे, बस आईबी में अपना कस्टम व्यू सेट करने के विपरीत (शायद एक बग जिस तरह से xibs अनपॅक किए गए हैं) – valexa

6

http://www.mail-archive.com/[email protected]/msg35673.html पर चर्चा में एक एप्पल इंजीनियर के अनुसार, वहाँ इंटरफ़ेस बिल्डर में एक बग जब एक NSToolbarItem के लिए दृश्य के रूप में प्रयोग किया जाता है जिससे "कस्टम दृश्य" (आईबी में बनाया NSViews) ठीक से डिकोड नहीं कर रहे हैं, और इसलिए नहीं है टूलबार में दिखाई दें। NSButtons और NSBoxes जैसे अन्य प्रकार के NSViews, टूलबार आइटम के रूप में ठीक काम करेंगे: आप इन्हें इंटरफ़ेस बिल्डर में बना सकते हैं और फिर उन्हें टूलबार आइटम में बनाने के लिए टूलबार में खींच सकते हैं।

(उपर्युक्त लिंक में चर्चा का अर्थ यह है कि बग डाउनटाइम पर XIB से "कस्टम व्यू" कैसे बनाया गया है: initWithFrame का उपयोग करके: initWithCoder:। चर्चा 200 9 से है लेकिन यह अभी भी नहीं है एक्सकोड 4.5/ओएस एक्स 10.8 के रूप में तय किया गया है।)

मेरे मामले में मैं कस्टम NSView सबक्लास को लागू करने के बजाय नियंत्रणों का एक सेट (वॉल्यूम स्लाइडर और न्यूनतम/अधिकतम बटन) को लपेटने के लिए नियमित एनएसवी व्यू का उपयोग कर रहा था। मैं एक NSBox के बजाय एनएसबीक्स के कंटेनर के रूप में उपयोग करके समस्या से बचने में सक्षम था: मैंने एनएसबीक्स पारदर्शी, शीर्षक-रहित और सीमाहीन बना दिया, इसलिए यह अन्यथा एक सादा NSView wrapper की तरह काम करता था। यह आईबी में थोड़ा और काम था, लेकिन मुझे टूलबार आइटम को प्रोग्रामेटिक रूप से देखने के लिए वायरिंग की परेशानी बचाई।

+0

आईएसबी के लिए एनएसबीक्स एक सादे एनएसवी व्यू से लगभग हमेशा बेहतर है, मैंने पाया है। – alfwatt

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