0

要在右键单击 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。

4

1 回答 1

1

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

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

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

于 2013-03-28T19:33:14.577 回答