Cocoa:源列表数据上的上下文菜单 - 不是标题

时间:2014-01-15 09:45:55

标签: objective-c cocoa nstableview nsmenu

我将菜单连接到tableview,但问题是当我右键单击源列表中的标题时也会显示上下文菜单。有没有办法禁用它?

因此,当isLeaf返回false(组头)时,它不应显示菜单。

2 个答案:

答案 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