要在右键单击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的方法。
答案 0 :(得分:1)
首先,您应该为除([theEvent type] == NSRightMouseDown)
之外的任何事件调用super。我不确定这是你的问题,但它是一个很好的起点。
其次,这不是委托方法,因此它与连接任何委托无关。你可以放心地忽略它。
第三,您是否确定您已将大纲视图的类名设置为Interface Builder中的子类(您在其中实现上述类的子类)的类名或(如果你在代码中创建它)在代码中指定了你的新子类?