2011-05-31 50 views
9

我有一个带有自定义单元的TableView。当用户在其中一个单元格上单击鼠标右键(或任何其他的右键单击的Apple变体)(并知道它们单击了哪个单元格时)时,会显示上下文菜单。可可:如何在右键单击NSTableView的单元格时获得上下文菜单

我试图子类NSTableView的,并覆盖此方法:

- (NSMenu *)menuForEvent:(NSEvent *)theEvent; 

但它永远不会被调用。

在另一方面,

- (void)rightMouseDown:(NSEvent *)theEvent; 

被调用。但我不确定这是我们想要的。

更多细节:

// 
// PTTableView.m 
// 
// 
// Created by Nathan Hazout on 5/31/11. 
// Copyright 2011 __MyCompanyName__. All rights reserved. 
// 

#import "PTTableView.h" 


@implementation PTTableView 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

- (void)rightMouseDown:(NSEvent *)theEvent { 
    NSLog(@"entered rightMouseDown"); 
} 

- (NSMenu *)menuForEvent:(NSEvent *)theEvent { 
    NSLog(@"entered menuForEvent"); 
    return [super menuForEvent:theEvent]; 
} 

- (NSView *)hitTest:(NSPoint)aPoint{ 
    NSLog(@"entered hitTest"); 
    return [super hitTest:aPoint]; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

@end 

rightMouseDown被调用。 hiTest被多次调用。但是menuForEvent不。

回答

49

有没有必要弥补事件处理,所有你必须做的分配上下文菜单是设置表视图的menu插座指向NSMenu对象,你想用于上下文菜单。

您可以在界面构建器中通过将NSMenu对象放入您的笔尖文件并将控件从表格视图拖动到菜单来设置插口来实现。

或者,您可以使用-setMenu:方法NSTableView(继承自NSResponder)以编程方式分配菜单。

+0

我应该在TableView还是Cell上做? – 2011-05-31 12:20:17

+0

将上下文菜单分配给视图。 – 2011-05-31 14:08:30

+0

Hi Rob,请你指出我应该怎么做才能左键单击(而不是右键)打开相同的上下文菜单。 – 2013-01-31 11:38:22

相关问题