NSOutlineView如何将上下文菜单连接到委托

时间:2013-03-28 18:56:11

标签: objective-c cocoa nsoutlineview

要在右键单击NSOutlineView时显示上下文菜单,您必须将其子类化并覆盖:

- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
    NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    id item = [self itemAtRow: [self rowAtPoint:pt]];

    // Only the delegate knows how to create a menu based on the item
    return [self createMenuFor: item]; 
}

那么让委托在这里创建菜单并处理菜单操作的正确方法是什么?

编辑 - 所以子类不知道如何创建菜单,所以我就这样做了。好吗?我只是没有看到任何关于如何在线与代表沟通的示例代码。

    return [[self delegate] createMenuForItem:item]; 

显然在我的大纲视图委托中定义了一个返回NSMenu的方法。

1 个答案:

答案 0 :(得分:1)

首先,您应该为除([theEvent type] == NSRightMouseDown)之外的任何事件调用super。我不确定这是你的问题,但它是一个很好的起点。

其次,这不是委托方法,因此它与连接任何委托无关。你可以放心地忽略它。

第三,您是否确定您已将大纲视图的类名设置为Interface Builder中的子类(您在其中实现上述类的子类)的类名或(如果你在代码中创建它)在代码中指定了你的新子类?