NSMenuItem操作未执行

时间:2014-04-17 19:01:40

标签: macos cocoa nsmenuitem

我正在我的应用上创建一个状态栏,菜单显示正常,但它似乎无法访问我为其设置的操作。

我通过C函数添加状态栏:

void MyFunction(CefRefPtr<CefBrowser> browser) {
    MyMenuItem* item = [[MyMenuItem alloc] initWithTitle:@"Item 1" action:@selector(doAction:) keyEquivalent:@"")];
    [item setBrowser:browser];

    NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
    [menu setAutoenablesItems:NO];
    [menu addItem:item];

    NSStatusBar *statusBar = [NSStatusBar systemStatusBar];
    MSStatusItem *statusItem = [statusBar statusItemWithLength:NSBariableStatusItemLength];
    [statusItem retain];
    [statusItem setImage:imageObj];
    [statusItem setTitle:@"Status"];
    [statusItem setHilightMode:YES];
    [statusITem setMenu:menu];      
}

在MyFunction()上方声明操作:

@interfaceMyMenuItem : NSMenuItem {
    CefRefPtr<CefBrowser>_browser;
}

@property (nonatomic) CefRefPtr<CefBrowser> browser;
- (void)doAction:(id)sender;
@end

@implementation MyMenuItem
@synthesize browser = _browser;
- (void)doAction:(id)sender {
    NSLog(@"Doing action");
}
@end

所有内容编译都很好,所以我认为它可能与从C函数创建项目有关,但没有正确设置界面。

2 个答案:

答案 0 :(得分:3)

您是否尝试过设置menuitem的目标并实现validateUserInterfaceItem?

MyMenuItem* item = [[MyMenuItem alloc] initWithTitle:@"Item 1" action:@selector(doAction:) keyEquivalent:@"")];
[item setTarget:self];

-(BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)anItem
{
    return ([anItem selector] == @selector(doAction:)); 
}

答案 1 :(得分:0)

我们需要设定目标。 快速回复

let item = NSMenuItem(title: "Quit", action: #selector(quitApp), keyEquivalent: "p")
item.target = self

@objc func quitApp() {
    NSApplication.shared.terminate(self)
}
相关问题