NSMenuItem 操作未执行

use*_*429 4 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];      
}
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

一切都编译得很好,所以我认为这可能与从 C 函数创建项目有关,但没有正确设置接口。

lea*_*lin 9

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

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

和

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