我将菜单连接到tableview,但问题是当我右键单击源列表中的标题时也会显示上下文菜单。有没有办法禁用它?
因此,当isLeaf返回false(组头)时,它不应显示菜单。
答案 0 :(得分:1)
我会尝试将自己设置为菜单的代表,并在- (void)menuNeedsUpdate:(NSMenu*)menu;
中删除所有项目。
如果失败,只需将NSTableView子类化并根据需要实现- (NSMenu *)menuForEvent:(NSEvent *)event;
。
答案 1 :(得分:0)
至于我,菜单逻辑的最佳位置是委托,所以你可以继承NSTableView
并制作这样的东西(在这个例子中有NSOutlineView
但它没有计量)< / p>
@protocol MYOutlineViewDelegate;
@interface MYOutlineView : NSOutlineView
@property (assign) id<MYOutlineViewDelegate> delegate;
@end
@protocol MYOutlineViewDelegate <NSOutlineViewDelegate>
- (NSMenu *)outlineView:(NSOutlineView *)outlineView menuForItem:(id)item;
@end
@implementation MYOutlineView
@dynamic delegate;
- (NSMenu *)menuForEvent:(NSEvent *)theEvent
{
NSMenu* menu = nil;
NSPoint clickPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
id item = [self itemAtRow:[self rowAtPoint:point]];
if([self.delegate respondsToSelector:@selector(outlineView:menuForItem:)]) {
menu = [self.delegate outlineView:self menuForItem:item];
}
return menu;
}
@end