在Cocoa中为NSMenuItem设置目标/操作的正确方法?
我正在进行一些初步的Cocoa编程,我遇到了一些真正的困难。
基本上,我有一个带有
NSMenu
的NSStatusBar
项目作为菜单。菜单有一个NMMenuItem
。在IB中,我将NSMenuItem连接到一个NSObject
,它本身被设置为ApplicationDelegate的类;然后我将Received Actions设置为ApplicationDelegate中的IBAction
方法。我认为一切都正确连接,除非我运行程序并单击菜单项时不调用IBAction
方法。我真的无法解决这个问题。这是相关的代码。
应用程序委托h文件:
#import <Cocoa/Cocoa.h>
@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}
- (IBAction)showPreferencePanel:(id)sender;
@end
应用程序委托m文件:
#import "sssAppDelegate.h"
@implementation sssAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
-(void)awakeFromNib{
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"Status"];
[statusItem setHighlightMode:YES];
}
- (IBAction)showPreferencePanel:(id)sender {
NSLog(@"Hello World!");
}
@end
正如我所说,在IB中,我已将应用程序代表中的NSMenu
连接到statusMenu
(因此菜单全部显示在NSStatusBar
下),并且我已将NSMenu
中的NSMenuItem
连接到应用委托类的NSObject
,并将其挂钩最多调用showPreferencePanel,但是当我运行它时没有任何反应!!!
我也以编程方式尝试了它,但仍然无法调用IBAction方法。
编辑:我会附上一些屏幕抓取来显示IB中的设置,但我还没有被允许。
主要的笔尖包含添加到NSStatusBar
的菜单,它看起来像这样:
FONSApplication
FRFirstResponder
申请NSApplication
字体管理器NSFontManager
主菜单NSMenu
菜单项(首选项)NSMenuItem
Sss App代表sssAppDelegate
NSMenuItem:
已发送操作 - showPreferencePanel
--->Sss App Delegate
Sss App代表:
奥特莱斯 - statusMenu
--->Main Menu
收到的行动 - showPreferencePanel:
--->Main Item (Preferences)
没有找到相关结果
已邀请:
1 个回复
拭十年
它应该工作。