2011-08-20 13 views
5

सभी, इसलिए मेरे पास NSBox का उप-वर्ग है और इसमें एक लेबल और दो छवि दृश्यों जैसे उप-दृश्य हैं। मैंने इसमें menuForEvent: ओवरराइड किया है। हालांकि, जब मैं इसे चुनने के लिए NSBox पर क्लिक करता हूं और उसके बाद नियंत्रण + अपने किसी भी सबव्यू पर क्लिक करता हूं तो menuForEvent: कभी नहीं कहा जाता है।नियंत्रण + मेनू को ट्रिगर नहीं करने के लिए क्लिक करें

मुझे समझ में नहीं आता कि ऐसा क्यों है।

+0

मेरे पास एक टेबल में एक ही चीज़ है ... आपको बताएगी कि मुझे क्या मिल रहा है। –

उत्तर

1

आप menuForEvent लागू करने की आवश्यकता: subviews में भी, और अपने superview के (NSBox उपवर्ग) करने के लिए घटना को आगे menuForEvent के कार्यान्वयन:

- (NSMenu *)menuForEvent:(NSEvent *)event 
{ 
    return [[self superview] menuForEvent:event]; 
} 

मैं मान लिया है कि यह स्वचालित रूप से बिना superview चले जाते हैं सबव्यूस subclassing की जरूरत है। मैंने पाया कि एक राइट-क्लिक करता है, लेकिन, किसी कारण से, नियंत्रण-क्लिक नहीं करता है।

+0

यह वास्तव में समस्या को दर्द रहित ढंग से हल करता है, धन्यवाद! – duncanwilcox

4

एनएसवी व्यू द्वारा नियंत्रित-क्लिक और राइट-क्लिक को नियंत्रित करने में एक अंतर है (जैसा कि जेएफईआरटी इंगित किया गया है)। प्रासंगिक मेनू के लिए दिखाई देंगे यदि क्लिक एक सबव्यू के भीतर आता है, लेकिन पर नियंत्रण-क्लिक पर क्लिक करें पर राइट-क्लिक करें।

मैं इस से आश्चर्यचकित था और वास्तव में अधिक जानकारी के लिए यहाँ के साथ इस बारे में एक पोस्ट ने लिखा है: NSView control-click quirks

एक जोड़े को संभावित समाधान हैं, लेकिन अधिभावी/अपने पूरे subview पेड़ को अनुकूलित कर शायद सबसे अच्छा विकल्प नहीं है। , हालांकि यह इस व्यवहार को हार्डकोड करने महान नहीं है

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    if (theEvent.modifierFlags & NSControlKeyMask) 
    { 
     [NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self]; 
    } 
} 

यह: मैं के लिए यह आपके प्रासंगिक मेनू एक नियंत्रण-क्लिक के लिए अपने उच्च-स्तरीय दृश्य (अपने NSBox उपवर्ग) में स्पष्ट रूप से प्रदर्शित करने के लिए है सबसे अच्छा ठीक पाया है अपने पूरे सबव्यू पेड़ में हेरफेर या ट्रैवर्सिंग से बचाता है, जो अधिक समस्याग्रस्त साइड इफेक्ट्स/बग्स ले सकता है।

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