1

我试图覆盖简单的 NSView 方法:

- (NSMenu *)menuForEvent:(NSEvent *)event {
   NSMenu* result = [super menuForEvent: event];
   NSMenuItem* mi = [[NSMenuItem alloc] initWithTitle: @"Foobar" action: @selector(foobar) keyEquivalent: @""];
   [result addItem: mi];    
   return result;
}

但它不起作用。它永远不会被调用。

4

3 回答 3

5

尝试使用 NSTextViewDelegate 协议

- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex

然后窗口的字段编辑器将向您的 NSTextField 询问菜单

于 2013-12-31T08:00:27.347 回答
0

如果文本字段有焦点,我相信您得到的菜单实际上是Field Editor的菜单。也许问它菜单。

于 2010-08-24T17:37:28.210 回答
0

感谢其他人指路。我无法让窗口的默认字段编辑器使用任何委托方法。最后,我将以下内容放入窗口委托的 -windowDidLoad 方法中

NSTextView* defaultFieldEditor = [self.window fieldEditor:YES forObject:nil];
//  defaultEditor.delegate = self; didn't help
NSMenu *mu = defaultEditor.menu;
[mu insertItem:[NSMenuItem separatorItem] atIndex:0];
[mu insertItemWithTitle:@"Insert Line"
                 action:@selector(acnInsertLine:)
          keyEquivalent:@"" atIndex:0];
 [mu insertItemWithTitle:@"Delete Line"
                  action:@selector(acnDeleteLine:)
           keyEquivalent:@"" atIndex:0];

这应该将项目放在开头(所以相反的顺序)。你可以addItem:改用。两者都存在菜单内容不同的问题,并且您的项目可能位于中间的某个位置。

请注意,即使它覆盖的控件是 NSTextField,字段编辑器也是 NSTextView。这让我有些困惑。

于 2014-06-10T22:12:42.980 回答