2016-02-11 19 views
8

Arabirim oluşturucudaki menüyü NSCollectionView ile sınırlandırdım. Ama CTRL + tıkla (sağ tıkla) tıkladığınızda menü gösterilmiyor.NSCollectionView, açılır içerik menüsü değil mi?

NSCollectionView alt sınıfına bazı yöntemler eklemeyi denedim. Bunların hiçbiri çağrılır: çağrılır

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

tek yöntemdir:

- (NSView *)hitTest:(NSPoint)aPoint 

NSCollectionView fare olaylarını aldığı anlamına geliyor.

Aynı yöntemleri NSCollectionViewItem alt sınıfına da eklemeyi denedim ve sonuç aynı. Sadece hitTest: denir.

cevap

1

Bu benim için çalışıyor:

@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 

umarım bu yardımcı olur.

+0

mouseDown yöntemi çağrılır, ancak menü açılır. Ama cevabınızı almıyorum: Üst sınıf metodunu herhangi bir özel kod ile geçersiz kıldınız, bu yüzden fark nedir? – aneuryzm

+0

Sorununuzun, mousedown'un çağrılmayacağını düşündüm. Bu çağrılması ile contextmenu görüntülemek için kolay olmalı. Cevabımı bir dakikada güncelledim –

+0

Anladım, teşekkürler. Ancak bu bir çözümdür, değil mi? Otomatik olarak açılır. – aneuryzm