2016-02-11 2 views
8

Ich habe das Menü an die NSCollectionView im Interface Builder gebunden. Aber wenn ich STRG + klicke (Rechtsklick) darauf wird das Menü nicht angezeigt.NSCollectionView öffnet Kontextmenü nicht?

Ich habe versucht, eine Methode zur NSCollectionView-Unterklasse hinzuzufügen. Keiner von ihnen wird aufgerufen:

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

Die einzige Methode, die aufgerufen wird, ist:

- (NSView *)hitTest:(NSPoint)aPoint 

was bedeutet, dass der NSCollectionView das Maus-Ereignis empfängt.

Ich habe auch versucht, die gleichen Methoden zu der Unterklasse von NSCollectionViewItem hinzuzufügen, und das Ergebnis ist das gleiche. Nur hitTest: wird aufgerufen.

Antwort

1

Dies funktioniert für mich:

@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 

Ich hoffe, das hilft.

+0

Die mouseDown-Methode wird aufgerufen, aber das Menü wird nicht angezeigt. Aber ich bekomme Ihre Antwort nicht: Sie haben die Superklassenmethode mit einem beliebigen benutzerdefinierten Code überschrieben. Worin besteht der Unterschied? – aneuryzm

+0

Ich dachte, dein Problem ist, dass der Mousedown nicht aufgerufen wird. Wenn es aufgerufen wird, sollte es einfach sein, das Kontextmenü anzuzeigen. Ich aktualisiere meine Antwort in einer Minute –

+0

Ich sehe, ok danke. Dies ist jedoch ein Workaround, oder? Es sollte automatisch eingeblendet werden. – aneuryzm