2016-02-11 8 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

私は、あなたの問題はマウスタウンが呼び出されないと思っていました。呼び出されると、コンテキストメニューを表示するのが簡単になるはずです。私は1分で私の答えを更新します –

+0

私は、大丈夫感謝を参照してください。しかし、これは回避策です、そうですか?自動的にポップアップするはずです。 – aneuryzm

関連する問題