我正在我的应用上创建一个状态栏,菜单显示正常,但它似乎无法访问我为其设置的操作。
我通过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函数创建项目有关,但没有正确设置界面。
答案 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)
}