2010-08-24 53 views
1

的上下文菜单我试图改写简单的NSView方法:我如何添加菜单项到的NSTextField

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

,但它不工作。它从来没有被称为。

回答

0

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

3

尝试使用NSTextViewDelegate协议

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

窗口的字段编辑器,然后会问你的NSTextField的菜单

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。这引起了我一些困惑。

相关问题