在Cocoa中为NSMenuItem设置目标/操作的正确方法?

时间:2011-03-05 19:38:21

标签: cocoa interface-builder nsmenuitem ibaction nsstatusitem

我正在进行一些初步的Cocoa编程时遇到一些真正的困难。

基本上,我有一个NSStatusBar项目附加NSMenu作为菜单。菜单只有一个NMMenuItem。在IB中,我已将NSMenuItem连接到NSObjectIBAction本身设置为ApplicationDelegate的类;然后,我将Received Actions设置为ApplicationDelegate中的IBAction方法。我认为一切都正确连接,除非我运行程序并单击菜单项时未调用#import <Cocoa/Cocoa.h> @interface sssAppDelegate : NSObject <NSApplicationDelegate> { IBOutlet NSMenu *statusMenu; NSStatusItem *statusItem; } - (IBAction)showPreferencePanel:(id)sender; @end 方法。我真的无法解决这个问题。这是相关的代码。

Application Delegate h file:

#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 

Application Delegate m file:

NSMenu

正如我所说,在IB中,我已将statusMenu连接到应用程序代理中的NSStatusBar(因此菜单全部显示在NSMenuItem下),并且我已连接{使用Application Delegate类在NSMenuNSObject内{1}},并将其连接到调用showPreferencePanel,但是当我运行它时没有任何反应!

我也以编程方式尝试过,但仍然无法调用IBAction方法。

编辑:我会附上一些屏幕抓取来显示IB中的设置,但我还没有被允许。

主要的笔尖包含添加到NSStatusBar的菜单,它看起来像这样:

  • FO NSApplication
  • FR FirstResponder
  • 申请NSApplication
  • 字体管理器NSFontManager
  • 主菜单NSMenu
    • 菜单项(首选项)NSMenuItem
  • Sss App代表sssAppDelegate

NSMenuItem:

  • 已发送的操作 - showPreferencePanel ---&gt; Sss App Delegate

Sss App代表:

  • 奥特莱斯 - statusMenu ---&gt; Main Menu
  • 收到的操作 - showPreferencePanel: ---&gt; Main Item (Preferences)

1 个答案:

答案 0 :(得分:2)

以编程方式,您尝试过:

[statusItem setTarget:someTarget];
[statusItem setAction:@selector(someSelector)];

它应该有用。