2016-02-11 4 views
8

मैंने मेनू को इंटरफ़ेस बिल्डर में NSCollectionView में बाध्य किया है। लेकिन जब मैं CTRL + क्लिक करता हूं (दायाँ क्लिक) उस पर मेनू दिखाई नहीं दे रहा है।NSCollectionView पॉपअप संदर्भ मेनू नहीं है?

मैंने NSCollectionView उपclass में कुछ विधि जोड़ने का प्रयास किया है। उनमें से कोई भी शुरू हो जाती है:

+ (NSMenu*)defaultMenu 
- (NSMenu *)menuForEvent:(NSEvent *)theEvent 
- (void)rightMouseDown:(NSEvent *)theEvent 
- (void)sendEvent:(NSEvent *)theEvent 

केवल विधि है जो शुरू हो जाती है है:

- (NSView *)hitTest:(NSPoint)aPoint 

इसका मतलब है कि NSCollectionView माउस घटनाओं प्राप्त करता है।

मैंने एनएससीओलेक्शन व्यूइटम के उप-वर्ग में एक ही तरीके जोड़ने की कोशिश की है, और नतीजा वही है। केवल hitTest: कहा जाता है।

उत्तर

1

यह मेरे लिए काम करता है:

@interface MyCollectionView : NSView 
-(void)mouseDown:(NSEvent *)theEvent; 
@end 

@implementation MyCollectionView 

-(void)mouseDown:(NSEvent *)theEvent 
{ 

    NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"]; 
    [theMenu insertItemWithTitle:@"Beep" action:@selector(beep) keyEquivalent:@"" atIndex:0]; 
    [theMenu insertItemWithTitle:@"Honk" action:@selector(honk) keyEquivalent:@"" atIndex:1]; 

    [NSMenu popUpContextMenu:theMenu withEvent:theEvent forView:self]; 

    [super mouseDown:theEvent]; 

} 

-(void)beep{ 

} 

-(void)honk{ 

} 

@end 

मुझे आशा है कि इस मदद करता है।

+0

माउसडाउन विधि कहा जाता है, लेकिन मेनू पॉपअप नहीं करता है। लेकिन मुझे आपका जवाब नहीं मिला: आपने सुपरक्लास विधि को किसी भी कस्टम कोड के साथ ओवरराइड किया है, तो क्या अंतर है? – aneuryzm

+0

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

+0

में अपना उत्तर अपडेट करता हूं, ठीक है धन्यवाद। हालांकि यह एक कामकाज है, है ना? यह स्वचालित रूप से पॉपअप होना चाहिए। – aneuryzm

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