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 函数创建项目有关,但没有正确设置接口。
您是否尝试过设置菜单项的目标并实现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)
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |