2016-02-11 3 views
8

Я ограничил меню NSCollectionView в построителе интерфейса. Но когда я нажимаю CTRL + (щелкните правой кнопкой мыши), меню не отображается.NSCollectionView не отображает контекстное меню?

Я попытался добавить некоторый метод в подкласс NSCollectionView. Ни один из них не вызывается:

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

Единственный метод, который вызывается является:

- (NSView *)hitTest:(NSPoint)aPoint 

Это означает, что NSCollectionView получает события мыши.

Я также попытался добавить те же методы в подкласс NSCollectionViewItem, и результат будет таким же. Вызывается только 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

Вызывается метод mouseDown, но меню не отображается. Но я не получаю ваш ответ: вы переопределяете метод суперкласса с любым пользовательским кодом, так что в чем разница? – aneuryzm

+0

Я думал, что ваша проблема в том, что мышь не будет вызвана. При вызове вызова это должно быть легко отображать контекстное меню. Я обновляю свой ответ через минуту –

+0

Я вижу, хорошо спасибо. Однако это обходной путь, не так ли? Он должен всплывать автоматически. – aneuryzm

Смежные вопросы